Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2011, 18:15   #1
v.v.veter
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 16
Вопрос Delphi Поиск в базе

Суть такова. Есть база access. В таблице столбцы
ID,Slova,Povtor,Mesto. По нажатию кнопки происходит поиск по "Slova".
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Table.Locate('Slova',Edit1.Text,[loCaseInsensitive, loPartialKey])then
    ShowMessage('Запись не найдена');

end;
но он находит первую подходящую строку и перемещает на нее курсор.А нужно все которые подходят, и что бы их выводило в memo или типо того.
Дайте пример, или как и через, что можно это реализовать, заранее благодарен.
v.v.veter вне форума Ответить с цитированием
Старый 01.06.2011, 19:16   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

примерно так (в мемо) (не забудьте настроить Connection у Adoquery)

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Adoquery1.Close;
  Adoquery1.SQL.Text := 'Select * from ВаШаТаблица where Slova like '+QuotedStr('*'+Edit1.Text+'*');
  Adoquery1.Open;
  Memo1.Clear;
  while Not Adoquery1.EOF do begin
    Memo1.Lines.Append(Adoquery1.FieldByName('ID').AsString + Adoquery1.FieldByName('SLOVA').AsString + Adoquery1.FieldByName('POVTOR').AsString +Adoquery1.FieldByName('MESTO').AsString);
    Adoquery1.Next;
  end;
  Adoquery1.Close;
end;
а ещё лучше, свяжите DBGrid через DataSource с этим самым вышеприведённым ADOQuery1 - тогда увидите отобранные записи прямо в гриде..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.06.2011, 22:25   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
связал DBGrid через DataSource с этим самым вышеприведённым ADOQuery1, но что писать в ADOQuery в SQL (TStrings) ?
Какой запрос,без него не ставиться active в тру. и в итоге не работает.
А и не надо! Для проверки соединения, конечно, можете туда написать такой текст
Код:
Select * from ВаШаТаблица
Это даст возможность сделать Query активным.
Но, это только для отладки. Этот ADOQuery1 надо в DesingTime (на форме на этапе разработки) сделать Active -> FALSE
а на кнопку поместить примерно такой код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Adoquery1.Close;
  Adoquery1.SQL.Text := 'Select * from ВаШаТаблица where Slova like '+QuotedStr('*'+Edit1.Text+'*');
  Adoquery1.Open;
end;
ну и не забудьте везде вместо ВаШаТаблица подставить имя вашей таблицы!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.06.2011, 22:52   #4
v.v.veter
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 16
По умолчанию

если этот код
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Adoquery1.Close;
  Adoquery1.SQL.Text := 'Select * from poisk where Slova like '+QuotedStr('*'+Edit1.Text+'*');
  Adoquery1.Open;
  Memo1.Clear;
  while Not Adoquery1.EOF do begin
    Memo1.Lines.Append(Adoquery1.FieldByName('ID').AsString + Adoquery1.FieldByName('SLOVA').AsString + Adoquery1.FieldByName('POVTOR').AsString +Adoquery1.FieldByName('MESTO').AsString);
    Adoquery1.Next;
  end;
  Adoquery1.Close;
end;
то ничего не выдает
если сделать так
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
  while Not Adoquery1.EOF do begin
    Memo1.Lines.Append(Adoquery1.FieldByName('ID').AsString + Adoquery1.FieldByName('SLOVA').AsString + Adoquery1.FieldByName('POVTOR').AsString +Adoquery1.FieldByName('MESTO').AsString);
    Adoquery1.Next;
  end;
  Adoquery1.Close;
end;
то выводит все в поле мемо,ну естественно ничего не ищет.
v.v.veter вне форума Ответить с цитированием
Старый 01.06.2011, 23:06   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а так?
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Adoquery1.Close;
  Adoquery1.SQL.Text := 'Select * from poisk where Slova like '+QuotedStr('*'+Trim(Edit1.Text)+'*');
  Adoquery1.Open;
  Memo1.Clear;
  while Not Adoquery1.EOF do begin
    Memo1.Lines.Append(Adoquery1.FieldByName('ID').AsString + Adoquery1.FieldByName('SLOVA').AsString + Adoquery1.FieldByName('POVTOR').AsString +Adoquery1.FieldByName('MESTO').AsString);
    Adoquery1.Next;
  end;
  Adoquery1.Close;
end;
p.s. а в Edit1.Text точно указан текст, который есть в таблице Poisk в поле Slova ?! Уверены? И регистр совпадает? и русские/английские буквы не перепутаны?
Попробуйте в Edit1.Text одну букву задать, такую, что точно есть в одном из Slova...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.06.2011, 23:16   #6
v.v.veter
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 16
По умолчанию

Чет нет,или я что-то не то делаю, вот проект. Если не лень,гляньте.
Вложения
Тип файла: rar 1.rar (533.1 Кб, 6 просмотров)

Последний раз редактировалось v.v.veter; 02.06.2011 в 01:41.
v.v.veter вне форума Ответить с цитированием
Старый 02.06.2011, 09:47   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я не знаю, кто и на каком этапе подменяет подстановочные шаблоны...
но, похоже, что вместо звездочек (как это требует оператор LIKE в ACCESS) нужно писать стандартные (как в стандарте SQL) знаки %

попробуйте так:
Код:
  Adoquery1.SQL.Text := 'Select * from poisk where Slova like '+QuotedStr('%'+Trim(Edit1.Text)+'%');
  Adoquery1.Open;
  ShowMessage('количество записей в выборке: '+IntToStr(ADOQuery1.RecordCount));
p.s. если хотите видеть результаты выборки в гриде - уберите в конце закрытие датасета Adoquery1.Close - убрать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.06.2011, 11:21   #8
v.v.veter
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 16
По умолчанию

Спасибо, заработало!
v.v.veter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по базе niziriska PHP 5 02.09.2010 06:33
Delphi. Поиск по базе данных Access... hohol90 Помощь студентам 1 08.06.2010 08:14
Access + ADO + Delphi = Поиск по базе vicvtor БД в Delphi 35 10.02.2009 11:00
Поиск по базе Антон Шестаков БД в Delphi 1 22.01.2008 20:32
Поиск по базе Таня84 БД в Delphi 3 09.02.2007 10:53