Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизПоиск по 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c