Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск по Lookup-полям [D7, MySQL]


DmitryNekl ©   (2004-03-22 15:14:00) 

Добрый день!

Подскажите, пожалуйста.

Есть две таблицы. В первой содержится код и строка (id_type, title_type), во второй - только код, а для удобства ввода создано lookup-поле и ввод производится с помощью выбора из выпадающего списка.

Нужно осуществлять поиск по второй таблице. Я что делаю:
procedure TDataModule.ADOQueryFilterRecord(DataSet: TDataSet; var Accept: Boolean);
var
 s: string;
begin
 if Dataset = ADOQuery3 then
 begin
   s := (Form1.MDIChildren[i] as TfrmArticles).Edit3.Text;
   if s <> '' then
   begin
     Accept:=false;
     if (not DataSet['title_gr'].IsNull) then Accept:=Accept or (Pos(AnsiUpperCase(s), AnsiUpperCase(DataSet['title_gr']))>0);
     if (not DataSet['title_art'].IsNull) then Accept:=Accept or (Pos(AnsiUpperCase(s), AnsiUpperCase(DataSet['title_art']))>0);
     if (not DataSet['title_type'].IsNull) then Accept:=Accept or (Pos(AnsiUpperCase(s), AnsiUpperCase(DataSet['title_type'])>0);
...


Собственно, поле title_type - оно стринговое. Для него KeyFields и LookupKeyFields - id_type - целое. При компиляции указанного участка кода возникает ошибка "Несовместимые типы string и integer".

Как с этим бороться и искать-таки вхождение строки во второй таблице?


Domkrat   (2004-03-22 18:01:00) [1]

Не работал с ADO, но если возникает ошибка "Несовместимые типы string и integer", значит они несовместимы :)

Попробуй писать DataSet.FieldByName('title_type').AsString,
как тебе уже подсказали. Поставь точку останова. И вперед.


Johnmen   (2004-03-22 18:01:00) [2]

пост №1 пункт №1


DmitryNekl   (2004-03-22 17:43:00) [3]

Все же вопрос был - откуда ошибка и как с ней бороться? Стратегически другой подход - дело хорошее, но сейчас излишнее...


Sergey13   (2004-03-22 17:05:00) [4]

2DmitryNekl ©   (22.03.04 16:57) [5]
>К сожалению, не пойдет.
Ну, тебе виднее. Хотя почему - не понятно.

>На форме три таблицы, у каждой - свой поиск. :)
Да хоть 33. Но настаивать не буду.


DmitryNekl   (2004-03-22 16:57:00) [5]

2 Sergey13

К сожалению, не пойдет. На форме три таблицы, у каждой - свой поиск. :)


Sergey13   (2004-03-22 16:46:00) [6]

2DmitryNekl ©   (22.03.04 16:34) [3]
ADOQuery в твоей проге это запрос. Про первый спорить не буду, может и второй. 8-) В запросе может быть записано обращение к нескольким полям разных таблиц одновременно.


DmitryNekl   (2004-03-22 16:34:00) [7]

2 Johnmen:
1. Не помогает: ошибка та же...
2. Не совсем. Есть большая таблица с кучей полей и поле Edit3, в которое пишется строка поиска. В результате поиска должны остаться только те записи, в которых присутствует указанная строка.

Причем, что удивительно: в виде Accept:=Accept or (Pos(AnsiUpperCase(s), AnsiUpperCase(DataSet['title_type'])>0) все работает, если поле непустое... А при проверке на пустоту поля вываливается несоответствие типа... :(

2 Sergey13:
А что такое первый запрос?


Sergey13   (2004-03-22 16:18:00) [8]

А почему бы не привинтить намертво лукапное поле к первому запросу и искать по нему. Лукап при этом можно и оставить, если хочется.


Johnmen   (2004-03-22 16:13:00) [9]

1. Лучше явно приводить типы DataSet.FieldByName('title_type').AsString
2. Я так понял надо сужать (фильтруя) выпадающий список при поиске ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо