Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Поиск по Lookup-полям   Найти похожие ветки 

 
DmitryNekl ©   (2004-03-22 15:14) [0]

Добрый день!

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

Есть две таблицы. В первой содержится код и строка (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".

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


 
Johnmen ©   (2004-03-22 16:13) [1]

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


 
Sergey13 ©   (2004-03-22 16:18) [2]

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


 
DmitryNekl ©   (2004-03-22 16:34) [3]

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

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

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


 
Sergey13 ©   (2004-03-22 16:46) [4]

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


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

2 Sergey13

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


 
Sergey13 ©   (2004-03-22 17:05) [6]

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

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


 
DmitryNekl ©   (2004-03-22 17:43) [7]

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


 
Domkrat ©   (2004-03-22 18:01) [8]

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

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


 
Johnmen ©   (2004-03-22 18:01) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
14-1079020337
WebErr
2004-03-11 18:52
2004.04.18
2D - forever


4-1076083261
TankMan
2004-02-06 19:01
2004.04.18
Как сделать дамп процесса из Delphi...


14-1080400629
KhazModan
2004-03-27 18:17
2004.04.18
Рисование разделителя


1-1080657075
Назаров Евгений
2004-03-30 18:31
2004.04.18
Оконтовка ячейки при создании Exel файла из Delphi


1-1080712831
V-Isa
2004-03-31 10:00
2004.04.18
Компонент