Поиск в базе данных Paradox
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Сама я додумалась до решения без использования SQL.
Программа эта - справочник по операторам ТП. Есть список (DBGrid1) с названиями операторов (цикл с параметром, составной оператор и т.д.), и два компонента DBMemo - для размещения вида оператора (типа FOR.. TO ... DO и пр.) и его описания. Вся информация об операторах хранится в базе данных.
Блок поиска состоит из поля Edit1, для ввода искомого слова/текста, есть три radiobutton для выбора, в каком поле БД искать.
Поиск начинается после нажатия кнопки "Искать".
минус такого решения - находится только одно слово. Но, как думаете, имеет право на жизнь такой вот ход? Конечно, по сравнению с SQL нерационально ужасно, столько кода...
ops:
Программа эта - справочник по операторам ТП. Есть список (DBGrid1) с названиями операторов (цикл с параметром, составной оператор и т.д.), и два компонента DBMemo - для размещения вида оператора (типа FOR.. TO ... DO и пр.) и его описания. Вся информация об операторах хранится в базе данных.
Блок поиска состоит из поля Edit1, для ввода искомого слова/текста, есть три radiobutton для выбора, в каком поле БД искать.
Поиск начинается после нажатия кнопки "Искать".
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
//запуск поиска
begin
//проверка, не пусто ли поле поиска
if length(edit1.text)=0 then showmessage('Поле поиска пусто!')
else
begin
//определение, какой из переключателей выбран и поиск в соответсвующем поле базы данных
if radiobutton1.checked=true then
begin
//поиск по имени оператора в поле базы данных OperatorName
if not Table1.Locate('OperatorName', Edit1.Text, [loPartialKey]) then
ShowMessage('Извините, ничего не найдено!')
else
DBGrid1.SetFocus;
end;
if radiobutton2.checked=true then
//поиск по виду оператора в поле базы данных VidOperatora
begin
Table1.First;
//проверка описания на наличие слова
while (pos(edit1.text, dbmemo2.Text)=0) and (table1.eof=false) do
begin
//если не найдено
Table1.Next;
end;
//если конец таблицы и при этом ничего не найдено
if (pos(edit1.text, dbmemo2.Text)=0) and (table1.eof=true)then
showmessage('Извините, ничего не найдено!');
if pos(edit1.text, dbmemo2.Text)<>0 then
//выделение найденного слова
begin
DBMemo2.SelStart:=(pos(edit1.text, dbmemo2.Text))-1;
DBMemo2.SelLength:=length(edit1.Text);
DBGrid1.SetFocus;
end;
end;
if radiobutton3.checked=true then
//поиск в описании - в поле базы данных AboutOperator
begin
Table1.First;
//проверка описания на наличие слова
while (pos(edit1.text, dbmemo1.Text)=0) and (table1.eof=false) do
begin
//если не найдено
Table1.Next;
end;
//если конец таблицы и при этом ничего не найдено
if (pos(edit1.text, dbmemo1.Text)=0) and (table1.eof=true)then
showmessage('Извините, ничего не найдено!');
//если найдено - выделение найденного слова
if pos(edit1.text, dbmemo1.Text)<>0 then
begin
DBMemo1.SelStart:=pos(edit1.text, dbmemo1.Text)-1;
DBMemo1.SelLength:=length(edit1.Text);
DBGrid1.SetFocus;
end;
end;
end;
//если не выбран ни один из переключателй - предупредить пользователя.
if (radiobutton1.checked=false) and (radiobutton2.checked=false)and (radiobutton3.checked=false) then
showmessage('Выберите, ГДЕ искать!');
end;

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

