Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать Reload БД? Поиск по БД access без фильтраций БД 
:(
    Опции темы
borockov
Дата 17.2.2013, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.9.2012

Репутация: нет
Всего: нет



Здравствуйте. У меня такой вопрос. Есть бд access подключена к dbgrid через adoquery. В бд есть поле типа "Memo" мне надо реализовать поиск этому полю. Пробовал сделать через locate, не получилось попробовал через SQL все получается. 
Код

procedure TForm2.Button2Click(Sender: TObject);
begin
ADOquery1.SQL.Text:=('SELECT  * from Патент where [Информация о прототипе] LIKE "%' + Edit1.Text + '%"');
ADOquery1.Open;
end;

Но проблема в том что когда выполняется запрос и в БД находим "искомое" БД фильтруется и остаются только записи с искомым. А мне надо что бы БД не фильтровалась а записи в которых найдено "Искомое" как нибудь выделялась, например ячейка dbgrid  окрашивалась в желтый цвет. Помогите пожалуйста, заранее спасибо!
PM MAIL   Вверх
Данкинг
Дата 17.2.2013, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Ну вообще-то если к гриду подключён адоквери, то данные из него отображаться и будут. А что с locate не получилось?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
borockov
Дата 17.2.2013, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.9.2012

Репутация: нет
Всего: нет



Код

If not DBGrid1.DataSource.DataSet.Locate('Информация о прототипе', Edit1.Text, [])
then ShowMessage('Что то не нахожу');


Вот как то так было с locate. С текстовыми полями все работало отлично, но вот именно с полей "Memo" никак не хотел работать.
PM MAIL   Вверх
Данкинг
Дата 17.2.2013, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



А если 
Код

DBGrid1.DataSource.DataSet.Locate('Информация о прототипе', Edit1.Text, [locaseinsensitive,loPartialKey])

?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
northener
Дата 17.2.2013, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(borockov @  17.2.2013,  21:15 Найти цитируемый пост)
А мне надо что бы БД не фильтровалась а записи в которых найдено "Искомое" как нибудь выделялась, например ячейка dbgrid  окрашивалась в желтый цвет.

Задействуй событие ТDBGrid.OnDrawDataCell., в котором проверяй содержимое этого поля на соответствие или несооветствие своему условию. И в зависимости от результата проверки окрашивай ячейку в нужный цвет.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
borockov
Дата 18.2.2013, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.9.2012

Репутация: нет
Всего: нет



Цитата(Данкинг @ 17.2.2013,  23:34)
А если 
Код

DBGrid1.DataSource.DataSet.Locate('Информация о прототипе', Edit1.Text, [locaseinsensitive,loPartialKey])

?

Попробовал. Выскакивает ошибка "Не удается применить порядок сортировки". Где то в инете почитал что locate не может все таки работать с типом "Memo". 

Попробовал. Выскакивает ошибка "Не удается применить порядок сортировки". Где то в инете почитал что locate не может все таки работать с типом "Memo".

Добавлено через 1 минуту и 26 секунд
Цитата(northener @ 17.2.2013,  23:38)
Цитата(borockov @  17.2.2013,  21:15 Найти цитируемый пост)
А мне надо что бы БД не фильтровалась а записи в которых найдено "Искомое" как нибудь выделялась, например ячейка dbgrid  окрашивалась в желтый цвет.

Задействуй событие ТDBGrid.OnDrawDataCell., в котором проверяй содержимое этого поля на соответствие или несооветствие своему условию. И в зависимости от результата проверки окрашивай ячейку в нужный цвет.

Спасибо! С раскрашиванием dbgrid я думаю проблем не будет, мне бы решить этот вопрос с фильтрацией БД.
PM MAIL   Вверх
northener
Дата 18.2.2013, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(borockov @  18.2.2013,  00:08 Найти цитируемый пост)
мне бы решить этот вопрос с фильтрацией БД. 

Какой именно вопрос?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
borockov
Дата 18.2.2013, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.9.2012

Репутация: нет
Всего: нет



Цитата(northener @ 18.2.2013,  01:48)
Цитата(borockov @  18.2.2013,  00:08 Найти цитируемый пост)
мне бы решить этот вопрос с фильтрацией БД. 

Какой именно вопрос?

когда выполняется запрос и в БД находим "искомое" БД фильтруется и остаются только записи с искомым. А мне надо что бы БД не фильтровалась а записи в которых найдено "Искомое" как нибудь выделялась, например ячейка dbgrid  окрашивалась в желтый цвет.

C выделением разобрался, осталось разобраться с фильтрацией.
PM MAIL   Вверх
Данкинг
Дата 18.2.2013, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Мне пришло в голову только такое извращение: задать в таблице уникальной поле-ключ (впрочем, оно и так должно там быть). Найти значение с помощью Lookup, запомнить значение ключа для данной записи. А затем уже искать с помощью Locate, но в ключе.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
borockov
Дата 18.2.2013, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.9.2012

Репутация: нет
Всего: нет



Цитата(Данкинг @ 18.2.2013,  10:35)
Мне пришло в голову только такое извращение: задать в таблице уникальной поле-ключ (впрочем, оно и так должно там быть). Найти значение с помощью Lookup, запомнить значение ключа для данной записи. А затем уже искать с помощью Locate, но в ключе.

В бд ключ есть, т.е после того выполнился запрос запомнить ключ и ещё раз пробежаться уже с Locate?

Это сообщение отредактировал(а) borockov - 18.2.2013, 11:57
PM MAIL   Вверх
Данкинг
Дата 18.2.2013, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Ну да, я о том же.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
borockov
Дата 18.2.2013, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.9.2012

Репутация: нет
Всего: нет



А как запоминать ключи? А если ключей будет несколько? 
PM MAIL   Вверх
northener
Дата 18.2.2013, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Не понимаю зачем нужен отдельный поиск нужных записей?
Чем не годится мой первый совет? http://forum.vingrad.ru/index.php?showtopi...t&p=2548505


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Beltar
Дата 19.2.2013, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 0
Всего: 7



Можно просто отключить перерисовку контролов, и пройтись по базе, любым текстовым поиском проверяя соответствие поля memo условиям. А для запоминания текущей позиции есть bookmark'и.

Я поиск в поле произвольного типа так сделал:

Код

procedure TClassifierForm.Find(Fwd: Boolean);
var F:TField;
    S,SubStr:String;
    Bookmark:TBookmark;
    Last:Integer;//Если ищем назад, то равно 1, иначе DataSet.RecordCount
    DataSet:TDataSet;
begin
DataSet:=Source.DataSet;
if ((edFind.Text='') or (DataSet=nil)) then Exit;
try
SBar.Panels[2].Text:='Поиск...';
SubStr:=ANSIUpperCase(edFind.Text);
F:=TField(cbFields.Items.Objects[cbFields.ItemIndex]);
DataSet.DisableControls;
Bookmark:=DataSet.GetBookmark;
if Fwd then Last:=DataSet.RecordCount
       else Last:=1;
repeat
if Fwd then DataSet.Next
       else DataSet.Prior;
{Тупые багландовцы более естественное FindNext жутко тормозит}
S:=ANSIUpperCase(F.AsString);
if AnsiPos(SubStr,S)>0 then
  begin
  DataSet.EnableControls;
  Grid.SetFocus;
  Exit;
  end;
if DataSet.RecNo=Last then Break;
until False;
DataSet.GotoBookmark(Bookmark);
ShowMessage('Ничего не найдено');
finally
DataSet.FreeBookmark(Bookmark);
SBar.Panels[2].Text:='';
if DataSet.ControlsDisabled then DataSet.EnableControls;
end;
end;


Если записей не слишком много, то скороть приемлемая.

Это сообщение отредактировал(а) Beltar - 19.2.2013, 20:19


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0853 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.