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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Yulinka
Сообщения: 10
Зарегистрирован: 25 окт 2006, 14:55

Имеется база данных в формате 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 , а в качестве параметра должен выступать номер строки таблицы. Это возможно? как это провернуть? Использовать какую-нибудь функцию, которая выдаст количество строк в таблице? Или как?

И как сделать так, чтобы обнаруживалось не только первое вхождение слова, но и последующие?
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

чтобы просмотреть все записи, необходимо организовать цикл с переходом по записям типа:

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

  while not Table1.EOF do 
  begin
    // нужные действия
    Table1.Next;
  end;
не очень понял для чего выделять найденный кусок...
Изображение
Yulinka
Сообщения: 10
Зарегистрирован: 25 окт 2006, 14:55

выделять - чтобы указать, что слово действительно найдено. как в поиске по Справке, к примеру...
Yulinka
Сообщения: 10
Зарегистрирован: 25 окт 2006, 14:55

хм, просмотр записей работает, но мне нужно, чтобы на записи, содержащей искомое слово, происходила остановка, и вывод описания к слову... а тут поиск просто проходит от начала до конца таблицы. Нужно дорабатывать серединку - "нужные действия"?
Лелик_1044
Сообщения: 340
Зарегистрирован: 22 ноя 2004, 19:15
Откуда: Минск
Контактная информация:

Поставь эхлиб там можно вкл и выключать посик
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Yulinka
Сообщения: 10
Зарегистрирован: 25 окт 2006, 14:55

ЭЭЭ... можно попроще, я в прграммировании новичок... что это значит?

мне предложили воспользоваться SQL-запросом. насчет SQL вообще ничего не понимаю как организовать: какой компонент надо поместить на форму и как настроить его свойтсва, и т.д....
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

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

пишу на коленке ;) могу чё-то напутать
Изображение
Yulinka
Сообщения: 10
Зарегистрирован: 25 окт 2006, 14:55

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

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

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

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

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

почитала литературу, ознакомилась со структурами SQL-запросов, вопрос - указанный запрос требует строгого соответсвия искомого слова найденной информации? Или оно может просто входить в найденную фразу? Как "мол" - "молоко" и "молоток"?
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

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