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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2012, 13:42   #1
Владимир1989
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 30
По умолчанию Как реализовать поиск через ADOTable

ребят пытаюсь сделать поиск через ADOTable.Filter, но никак не получается.
Есть 3 таблицы, Пациент, Врач, Осмотр. В таблице осмотр (ADOOsmotr), есть поле КодПациента он связывается с КодПациентам из таблицы Пациент.
Почему реализую все через ADOTable, потому что вся база спрограммирована через ADOTable.
Не знаю как реализовать поиск с другой таблицы через свойство Filter. Как это прописать не знаю, если было бы все поля были в одной таблице там все ясно как сделать, но как сделать поиск по 2 таблицам?? Как это сделать подскажите пожалуйста?

Код:

if RadioGroup1.ItemIndex=1 then
begin
if (edit1.text<>'') then
  begin
  ADOOsmotr.Filter := '([ФИО Пациента] LIKE ''' + Edit1.Text + '%'')';
  ADOOsmotr.filtered:=true;
  end
  else
ADOOsmotr.Filtered:=false;
end;

Последний раз редактировалось Stilet; 26.09.2012 в 21:50.
Владимир1989 вне форума Ответить с цитированием
Старый 25.09.2012, 18:48   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

для этого используй не TTable, а TQuery c SQL запросом по нескольким таблицам связаным по ключам ... а поиск делай методом Query.Locate
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 25.09.2012, 20:52   #3
Владимир1989
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
для этого используй не TTable, а TQuery c SQL запросом по нескольким таблицам связаным по ключам ... а поиск делай методом Query.Locate
Я изначально хотел так делать, но там программа все сделано через ADOTable и также поиск сделан через ADOTable.
Там получается есть таблица Осмотр в поля (КодПациента,КодВрача и т.д.), так же есть таблица Пациент ее поля (КодПациента, ФИО Пациента и т.д.),
связь получается один ко многим. Поиск весь берется через ADOTable, я думал как прописать связь через ADOTAble1 c ADOTable2, чтобы в дальнейшем сделать поиск по полю ФИО Пациента с таблицы ADOTable2.
Можно ли это вообще реализовать без ADOQuery???
Возможно ли это вообще как то реализовать через ADOTable?
Заранее спасибо.

В принципе я могу скинуть программу, сможете помочь реализовать запрос по поиску, чтобы при этом найдя запись можно было ее отредактировать.

Последний раз редактировалось Stilet; 26.09.2012 в 21:51.
Владимир1989 вне форума Ответить с цитированием
Старый 26.09.2012, 09:47   #4
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Цитата:
Поиск весь берется через ADOTable, я думал как прописать связь через ADOTAble1 c ADOTable2, чтобы в дальнейшем сделать поиск по полю ФИО Пациента с таблицы ADOTable2.
Можно ли это вообще реализовать без ADOQuery???
Возможно ли это вообще как то реализовать через ADOTable?
На оба вопроса ответ отрицательный. И "прописать связь" не получится.

И, вообще, прислушайтесь к мудрому совету Yurk@.
Цитата:
... чтобы при этом найдя запись можно было ее отредактировать
Вот здесь возникает вопрос. О записи из какой таблицы идет речь? Осмотр или Пациент?

Еще приемчик. Никто не помешает сформировать запрос, объединяющий данные из двух таблиц (как Yurk@ говорит), в результатах этого запроса, полученного в ADOQuery, сделать нужный поиск. Затем, если поиск будет успешным, установить ADOTable1 (или ADOTable2) на найденную запись по значению поля КодПациента.

А программу скидывайте.
Скандербег вне форума Ответить с цитированием
Старый 26.09.2012, 10:04   #5
Владимир1989
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 30
По умолчанию

там поиск реализован частично (по дате и диагнозу работает). Файл приложил. Посмотрите базу пожалуйста.
Вложения
Тип файла: rar МедОтдел.rar (1.13 Мб, 126 просмотров)
Владимир1989 вне форума Ответить с цитированием
Старый 26.09.2012, 11:08   #6
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

То что сделано называется фильтром, но не поиском.
Хотя, конечно, фильтрация записей может служить целям поиска.
Хотелось бы узнать что все же нужно. Поиск или фильтр?

Если поиск нужен только для того чтобы редактировать найденную запись, то подойдет и фильтр, хотя это менее удобно для пользователя.
Скандербег вне форума Ответить с цитированием
Старый 26.09.2012, 11:15   #7
Владимир1989
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 30
По умолчанию

Получается хотел сделать фильтр для полей ФИО Пациента и ФИО Врача, но там идет связь между таблицами, у меня никак это не получалось.
Вообщем в итоге хотел сделать чтобы вводе значения в Edit1, находил ФИО Пациента и при этом его можно было отредактировать, удалить, вообщем все что угодно.
По дате у меня ищет все нормально, а вот по фио пациента никак не получается.
Владимир1989 вне форума Ответить с цитированием
Старый 26.09.2012, 11:42   #8
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Сейчас будет сделано. Немного терпения.
Правда, через ADOQuery, но тоже неплохо.

Показано как, ничего не переделывая, осуществлять поиск через запрос.
Поиск реализован по фамилиям пациента и врача.
Все остальное, т.е. установка фильтров по другим полям, осталось без изменения.
Но и по ним можно устроить поиск похожим образом.
Вложения
Тип файла: zip Unit1.zip (53.9 Кб, 76 просмотров)

Последний раз редактировалось Stilet; 26.09.2012 в 21:54.
Скандербег вне форума Ответить с цитированием
Старый 27.09.2012, 06:42   #9
Владимир1989
Пользователь
 
Регистрация: 25.09.2012
Сообщений: 30
По умолчанию

Скандербег, извини что вчера не смог ответить, замотался вчера, даже некогда было за ноутбук сесть.
Посмотрел только что код,я даже и не знал что можно так подключить adoquery и сделать связь с таблицами.
Правда фильтр не совсем так ищет, заметил, что когда одинаковые данные в таблице, например если искать по ФИО Пациента (к примеру ищем Петров П.В.), то он находит первую запись и встает на нее, я тут подумал, а возможно вообще реализовать так, чтобы например искал ФИО Пациента (Петров В.П.) и он выводил именно всех Петровых В.П. которые есть в базе, ну как бы делал обработку данных при этом исключая все лишнее из таблицы. Ну например как я сделал по дате, по диагнозу, так возможно реализовать? А то предпологается что в базе будет больше тысячи 500 данных, а то и больше.
Владимир1989 вне форума Ответить с цитированием
Старый 27.09.2012, 08:12   #10
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Если в БД предполагается хранить данные в означенном объеме, то вряд ли ваш Аксесс потянет такую прорву. Тем более показывать это все с помощью ADOTable, который, насколько помню, не буферизирует данные.
Вы же не хотите сказать, что в обозримом будущем перед пользователем в гриде будут показываться все 500 тыс. записей.
Нелепость этого показа очевидна - юзеру в каждый конкретный момент времени они все не нужны и поэтому, в том или ином виде, придется применять ограничения к количеству показываемых записей.

А для поиска при наличии дубликатной информации (фамилии одних и тех же людей, к примеру) нужно либо отсортировать данные в ADOTable по тому полю, по которому ведется поиск, либо, да, устанавливать фильтр по условиям.
Но тогда много лучше будет, если вместо ADOTable применить ADOQuery.

В общем, как ни крути, а если БД, действительно, предполагается с серьезным объемом данных, то без ADOQuery (и, подозреваю, без более серьезной СУБД) не обойтись.

Последний раз редактировалось Скандербег; 27.09.2012 в 10:18.
Скандербег вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать такой поиск? pеps PHP 3 22.01.2012 18:57
Как реализовать соединение мобилы с компом через Bluetooth. Мастак Общие вопросы по Java, Java SE, Kotlin 0 30.10.2011 23:05
Как реализовать поиск по строкам. shinta111 БД в Delphi 1 20.02.2011 22:34
Как копировать данные из ADOTable в ADOTable? mauar БД в Delphi 1 10.05.2008 16:05
как реализовать поиск синонимов? borsh Помощь студентам 24 16.12.2006 10:48