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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2011, 20:52   #1
Karych
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 49
Печаль Locate

Всем доброго времени суток!!!
Использую locate для постояного побуквенного поиска по бд. Значение находит, все в поряде, но добавить бы кнопку при нажатии на которую выводилось следующее найденое слово(если в столбце у таблицы множество одинаковых значений) КАК МОЖНО ЭТО СДЕЛАТЬ? подсказали что есть свойство next - а чье оно нет(
Код:
procedure TMainForm.ComboBox3Change(Sender: TObject);
var
S:string;
begin
if Length(ComboBox3.Text)<=0 then
begin
exit;
end;
S:=ComboBox3.Text;
DBGrid1.DataSource.DataSet.Locate(ComboBox2.Text,s,[loPartialKey]);
И еще как сделать так чтобы найденная(locate) строка выделялась в DBGrid без потери фокуса ввода на ComboBox?
Заранее спасибо!

ЗЫ:надеюсь понятно изъяснил...
Karych вне форума Ответить с цитированием
Старый 21.12.2011, 23:12   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Цитата:
Сообщение от Karych Посмотреть сообщение
...выводилось следующее найденое слово...
Куда выводилось?
Цитата:
Сообщение от Karych Посмотреть сообщение
(если в столбце у таблицы множество одинаковых значений)
Для этого нужно чтобы результат выборки (строки из таблицы для показа) был отсортирова по этому столбцу.
Цитата:
Сообщение от Karych Посмотреть сообщение
подсказали что есть свойство next - а чье оно нет (
Того же владельца, в чьем веденье и Locate.
Цитата:
Сообщение от Karych Посмотреть сообщение
строка выделялась в DBGrid без потери фокуса ввода на ComboBox?
Установить в DBGrid значение Options.dgAlwaysShowSelection в True.
Прик вне форума Ответить с цитированием
Старый 22.12.2011, 15:03   #3
Karych
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
Куда выводилось?
Извеняюсь, локейт же выделяет, чтоб выделял следующую строку в ДБГриде... Сортировка не вариант...

Цитата:
Сообщение от Прик Посмотреть сообщение
Установить в DBGrid значение Options.dgAlwaysShowSelection в True.
Спасиба помогло)

Есть одна мысль, засунуть локейт в цикл...
пропуская все строки включая и ту строку на которой курсор, и начинал поиск оттуда...
Только как получить номер выделеной курсором строки в определеном столбце
Код:
DBGrid1.DataSource.DataSet.FieldByName(ComboBox2.Text)...???
Karych вне форума Ответить с цитированием
Старый 22.12.2011, 15:15   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Нет Locate в цикле, от текущей записи прямым перебором сравнивая нужное поле с эталоном - другого ничего не придумаете
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.12.2011, 15:29   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,528
По умолчанию

можно еще попробовать не искать Locate, а отбирать нужные.
1. запросом в БД.
Код:
query.SQL.text:='....where поле =текст';
2. в готовом наборе данных (DataSet-e)
Код:
Dataset.filtred:=true;
DataSet.filter:='поле=текст';
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 22.12.2011, 21:52   #6
Karych
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Нет Locate в цикле, от текущей записи прямым перебором сравнивая нужное поле с эталоном - другого ничего не придумаете
Можно немного поподробнее... не совсем понимаю
Код:
with где стоит курсор в дбгриде do ..??

Цитата:
Сообщение от evg_m Посмотреть сообщение
можно еще попробовать не искать Locate, а отбирать нужные.
1. запросом в БД.
Код:
query.SQL.text:='....where поле =текст';
2. в готовом наборе данных (DataSet-e)
Код:
Dataset.filtred:=true;
DataSet.filter:='поле=текст';
в это вся и проблема, нужно чтоб все данные отображались, и среди них и проходил поиск...

А как создать "свойство" locateNext от прородителя locate - это тоже вариант?

Последний раз редактировалось Karych; 22.12.2011 в 21:54. Причина: дополнения внес
Karych вне форума Ответить с цитированием
Старый 22.12.2011, 23:04   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var xFind: Boolean;
...
xFind:=False;
DBGrid1.DataSource.DataSet.Next; //пропускаем текущую запись
while not DBGrid1.DataSource.DataSet.Eof do begin
  xFind:=AnsiSameText(DBGrid1.DataSource.DataSet.FieldByName('имя поля').AsString,'бла-бла');
  if xFind then Break; //нашли следующую  Ура!!
  DBGrid1.DataSource.DataSet.Next;
end;
if not xFind then ... //выдать сообщение запись не найдена или что-то в этом роде
Цитата:
"свойство" locateNext от прородителя locate
Бред
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 22.12.2011 в 23:27.
Аватар вне форума Ответить с цитированием
Старый 23.12.2011, 00:05   #8
Karych
Пользователь
 
Регистрация: 17.12.2011
Сообщений: 49
Радость

Цитата:
Сообщение от Аватар Посмотреть сообщение
Бред
не могу нечего по этому поводу сказать, но на одном форуме поддымался этот метод, но конкретно его никто не расписывал...
Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
var xFind: Boolean;
...
xFind:=False;
DBGrid1.DataSource.DataSet.Next; //пропускаем текущую запись
while not DBGrid1.DataSource.DataSet.Eof do begin
  xFind:=AnsiSameText(DBGrid1.DataSource.DataSet.FieldByName('имя поля').AsString,'бла-бла');
  if xFind then Break; //нашли следующую  Ура!!
  DBGrid1.DataSource.DataSet.Next;
end;
if not xFind then ... //выдать сообщение запись не найдена или что-то в этом роде
Спасибо огромное!!!!!!!!! очень выручили) все работает на ура!
Karych вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по Базе , Locate mmihan БД в Delphi 16 06.12.2011 16:54
Locate >>M.S<< Помощь студентам 0 22.10.2010 21:34
Проблема с Locate Сергей089 БД в Delphi 1 17.07.2010 09:58
не работает Locate SERG1980 БД в Delphi 9 26.03.2009 17:04
Locate Killbrum БД в Delphi 11 03.09.2008 10:01