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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2010, 22:32   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
Locate попробовал. Запускаю делфи ругается что не знает, что такое loPartialKey.
весьма странно... проверьте, в списке Uses должен присутстовать модуль DB

Цитата:
На ф1 конечно же нажимал, но перевести не смог...
ну.. не подумал... Так английский надо понемножку учить... )

Цитата:
Получается loPartialKey работает аналогично тому как в запросах like?
ну да, похоже... ищется вхождение искомой строки...


Цитата:
Если допустим один комбобокс не выбран осуществляется поиск по двум другим и т.д. У меня все работает с фамилией, именем, отчеством как задумано. Вот теперь очень хочется, чтоб по ДБЛукапкомбобоксам результаты поиска тоже фильтровались как по заданной фамилии, имени, отчеству.
вопрос не очень простой...
я бы предложил такой гарантированно работающий способ (но не возьмусь утверждать, что это единственный и/или лучший способ!):
формировать запрос во время выполнения программы (в run-time).
например, так:
Код:
    ADOQueryPoiskSotrudnika.SQL.Add
   ('select * from Sotrudnik where (Familiya like :etFamiliya) '+
    ' and (Imya like :etImya) and (Otchestvo like :etOtchestvo) ');
  if  Not VarIsNull(DBLookupComboBox1.KeyValue) then 
  //или  if  DBLookupComboBox1.Text <> '' then 
    ADOQueryPoiskSotrudnika.SQL.Add(' and (FK_StatusSotrudika = '+IntToStr(DBLookupComboBox1.KeyValue)+')');

  if  Not VarIsNull(DBLookupComboBox2.KeyValue) then 
  //или  if  DBLookupComboBox2.Text <> '' then 
    ADOQueryPoiskSotrudnika.SQL.Add(' and (FK_Organization = '+IntToStr(DBLookupComboBox2.KeyValue)+')');
и т.д...
 ....
ADOQueryPoiskSotrudnika.Open;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.04.2010, 06:17   #12
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

Цитата:
не, не надо ничего ручками отрисовывать!
soleil@mmc, в пост #4 уже полностью ответил на этот вопрос!
Цитата:
3) Можно ли как-нибудь сделать, чтоб при поиске выделялась найденная запись в ДБГриде?
локайт только найдёт, но не выделит.. это нужно делать ручками...
dron-s вне форума Ответить с цитированием
Старый 23.04.2010, 18:24   #13
Explosion
Пользователь
 
Регистрация: 08.11.2008
Сообщений: 52
По умолчанию

Serge_Bliznykov, dron-s, soleil@mmc, спасибо за помощь! =)

Цитата:
весьма странно... проверьте, в списке Uses должен присутстовать модуль DB
Угу, в uses модуля такого не было, теперь заработало.

Цитата:
я бы предложил такой гарантированно работающий способ (но не возьмусь утверждать, что это единственный и/или лучший способ!)
Работает этот способ! Вот выкладываю код для будущих поколений вдруг пригодится
Код:
//Осуществляем поиск
With datamodule2 do
  begin
    ADOQueryPoiskSotrudnika.Close; {деактивируем запрос в качестве одной из мер предосторожности}
    ADOQueryPoiskSotrudnika.SQL.Clear; {стираем предыдущий запрос}
    ADOQueryPoiskSotrudnika.SQL.Add('select * from Sotrudnik where (Familiya like :etFamiliya) and (Imya like :etImya) and (Otchestvo like :etOtchestvo)');
    if DBLookupCombobox1.Text <> '' then
      begin
        ADOQueryPoiskSotrudnika.SQL.Add(' and (FK_StatusSotrudnika = ' +IntToStr(DBLookupCombobox1.KeyValue)+')');
      end;
    if DBLookupCombobox2.Text <> '' then
      begin
        ADOQueryPoiskSotrudnika.SQL.Add(' and (FK_Organization = ' +IntToStr(DBLookupCombobox2.KeyValue)+')');
      end;
    if DBLookupCombobox3.Text <> '' then
      begin
        ADOQueryPoiskSotrudnika.SQL.Add(' and (FK_Dolzhnost = ' +IntToStr(DBLookupCombobox3.KeyValue)+')');
      end;
    ADOQueryPoiskSotrudnika.Parameters.ParamByName('etFamiliya').Value:=edit5.Text+'%';
    ADOQueryPoiskSotrudnika.Parameters.ParamByName('etImya').Value:=edit6.Text+'%';
    ADOQueryPoiskSotrudnika.Parameters.ParamByName('etOtchestvo').Value:=edit7.Text+'%';
    ADOQueryPoiskSotrudnika.Open; {выполняем запрос}
  end;

Я вот все правильно постановку задач не могу сформулировать, поэтому быстренько сделал формочку и скрин этой формочки, чтоб наглядней было:


Как видим результат поиска дал 2 записи. И вот допустим пользователь щелкнул по DBGrid'у, по записи, где находится сотрудник "Петров Петр Петрович". Как из этой выделенной записи выдернуть значение поля Familiya и засунуть это значение в Edit1.text, далее выдернуть значение поля "Imya" и засунуть в Edit2.Text, и выдернуть значение поля "Otchestvo" и засунуть в Edit3.Text?
Explosion вне форума Ответить с цитированием
Старый 23.04.2010, 20:19   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Как из этой выделенной записи выдернуть значение поля Familiya и засунуть это значение в Edit1.text, далее выдернуть значение поля "Imya" и засунуть в Edit2.Text, и выдернуть значение поля "Otchestvo" и засунуть в Edit3.Text?
если не ошибаюсь, у DBGrid'а есть событие OnClick...
Дальше просто, в обработчике:
Код:
  if ADOQueryPoiskSotrudnika.IsEmpty then Exit;
  Edit1.Text := ADOQueryPoiskSotrudnika.FieldByName('Familiya').AsString;
  Edit2.Text := ADOQueryPoiskSotrudnika.FieldByName('Imay').AsString;
...
__________________
Цитата:
Сообщение от dron-s
локайт только найдёт, но не выделит..
ошибаетесь. если DBGrid связан с данным датасетом, то текущей (выделенной) записью станет именно найденная в данных!

Последний раз редактировалось Serge_Bliznykov; 23.04.2010 в 20:22.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.04.2010, 20:47   #15
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

Цитата:
3) Можно ли как-нибудь сделать, чтоб при поиске выделялась найденная запись в ДБГриде?
под этим я имелл виду чтобы в самом гриде выделялась часть искомой информации вносившаяся в Edit1.. а в гриде её отрисовывать по средства OnColumnDrawCell
dron-s вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Вывод результатов алгоритма пошагово mistertvister Помощь студентам 2 12.11.2009 08:25
Класс матрица, вывод результатов на экран Student_911 Помощь студентам 0 03.10.2009 20:55
Вывод результатов! Серый Рыйцарь Помощь студентам 3 21.05.2009 07:46
Как осуществить ввод данных в одном цикле, их обработку в другом, и вывод результатов в третьем? ReM Паскаль, Turbo Pascal, PascalABC.NET 5 11.11.2008 18:21
Вывод результатов в другой Grid Barbara БД в Delphi 7 20.02.2007 15:14