Страница 1 из 2

Поиск в базе данных Paradox

Добавлено: 03 ноя 2006, 18:04
Yulinka
Имеется база данных в формате Paradox.
База данных представляет собой нечто вроде словарика - в первой колонке перечень слов, во второй - описания.

На форме (работа ведется в Delphi 7) это представлено следующим образом - первая колонка представляется через компонент DBGrid, вторая- через DBMemo. Выбирая слово в первой колонке, видим его описание во второй.

Необходимо организовать поиск по этой базе данных.

Уже написала такой кусок:

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
var
x: string;
s: string;
begin
 x:=Edit1.Text;
 s:=DBMemo1.Text;
  begin
  Edit1.SetFocus;              
   If pos (x, s)=0 then           
     Beep                   
   else
   begin                      //выделение найденного слова
    DBMemo1.SelStart:=pos(x,s)-1;
    DBMemo1.SelLength:=length(x); 
   end
  end;
end;
Правда, таким образом ведется поиск только в текущей записи, и обнаруживается только первое вхождение искомого слова.

Как сделать так, чтобы при поиске просматривались все записи таблицы? Я подумала, что это можно организовать с помощью цикла for i:=.. to .. do , а в качестве параметра должен выступать номер строки таблицы. Это возможно? как это провернуть? Использовать какую-нибудь функцию, которая выдаст количество строк в таблице? Или как?

И как сделать так, чтобы обнаруживалось не только первое вхождение слова, но и последующие?

Добавлено: 03 ноя 2006, 20:40
Игорь Акопян
чтобы просмотреть все записи, необходимо организовать цикл с переходом по записям типа:

Код: Выделить всё

  while not Table1.EOF do 
  begin
    // нужные действия
    Table1.Next;
  end;
не очень понял для чего выделять найденный кусок...

Добавлено: 03 ноя 2006, 21:11
Yulinka
выделять - чтобы указать, что слово действительно найдено. как в поиске по Справке, к примеру...

Добавлено: 03 ноя 2006, 21:44
Yulinka
хм, просмотр записей работает, но мне нужно, чтобы на записи, содержащей искомое слово, происходила остановка, и вывод описания к слову... а тут поиск просто проходит от начала до конца таблицы. Нужно дорабатывать серединку - "нужные действия"?

Добавлено: 04 ноя 2006, 10:13
Лелик_1044
Поставь эхлиб там можно вкл и выключать посик

Добавлено: 04 ноя 2006, 15:16
Yulinka
ЭЭЭ... можно попроще, я в прграммировании новичок... что это значит?

мне предложили воспользоваться SQL-запросом. насчет SQL вообще ничего не понимаю как организовать: какой компонент надо поместить на форму и как настроить его свойтсва, и т.д....

Добавлено: 07 ноя 2006, 12:28
Игорь Акопян
Yulinka,
Нужно дорабатывать серединку - "нужные действия"?
конечно, это был просто цикл прохода по всем записям ;)
можно конечно проходя по записям осуществлять выделение по вашему примеру.
но так как:
не только первое вхождение слова, но и последующие
то может оказаться удобным сформировать SQL-запрос, и его результат вывести в таблицу.
можно компонент TQuery, св-во SQL написать
select * from "c:\db\my_file.db" where MyFileld like %слово%"

пишу на коленке ;) могу чё-то напутать

Добавлено: 07 ноя 2006, 15:44
Yulinka
Я ЕГО НАПИСАЛА!!! аж самой не верится...
Игорь Акопян, огромное спасибо за совет, цикл WHILE оказался тем, что было нужно!
Организовала все немножко иначе, и ЗАРАБОТАЛО!

правда по-прежнему находит только первое вхождение, зато остальным требованиям удовлетворяет...

хм, про SQL-запрос мне один человек советовал уже... стоит, стоит попробовать... если моего терпения хватит помучиться ещё! :-)

Добавлено: 14 ноя 2006, 17:27
Yulinka
[quote="Игорь Акопян"]
то может оказаться удобным сформировать SQL-запрос, и его результат вывести в таблицу.
можно компонент TQuery, св-во SQL написать
select * from "c:\db\my_file.db" where MyFileld like %слово%"

пишу на коленке ]

почитала литературу, ознакомилась со структурами SQL-запросов, вопрос - указанный запрос требует строгого соответсвия искомого слова найденной информации? Или оно может просто входить в найденную фразу? Как "мол" - "молоко" и "молоток"?

Добавлено: 15 ноя 2006, 10:58
Игорь Акопян
конструкция "...like %мол%" выберет любое вхождение "мол".
строгое соответствие - без % (по сути % это аналог * в ОС - любое количество любых символов)