Текущий архив: 2003.05.26;
Скачать: CL | DM;
Вниз
Не могу организовать поиск методом Locate Найти похожие ветки
← →
Nikos (2003-05-03 23:10) [0]Купил книгу "программирование баз данных в Delphi 6" Фаронова. В ней описывается два метода поиска в Базах данных Locate и Lookup. С методом Lookup, у меня не возникло ни каких проблем, а вот с Locate не как не получается. Вот код:
DM.Tb.Locate("First; Second",EdText.Text,[ loCaseInsensitive ]);
Проблемы возникают с TLocateOptions. Если установлен параметр loCaseInsensitive, то программа выдает ошибки:
1)Undeclared identifier: "loCaseInsensitive"
2)Incompatible types: "TLocateOption" and "Integer".
Если оставить пустыми скобки, то программа запускается, но когда доходит до этого места компьютер зависает и спасает только ресет.
При параметр loPartialKey программа выдает такие же ошибки как и в первом случаи.
Подскажите, в чем ошибка и как ее исправить?
← →
Zacho © (2003-05-03 23:31) [1]Почитай подробнее про второй параметр. У него тип - Variant. Для поиска по более чем одному полю это должен быть вариантный массив.
В твоем случае что-то типа:DM.Tb.Locate("First;Second",VarArrayOf([EdText.Text,EdText2.Text]),[loCaseInsensitive]);
Читай про Variant и связанные темы: VarArrayCreate, VarArrayOf и т.п.
← →
MsGuns © (2003-05-03 23:37) [2]>DM.Tb.Locate("First; Second",EdText.Text,[loCaseInsensitive]);
Так надо ?. В смысле указан поиск по двум столбцам, а представлен образец только для одного
Переменная
TLocateOption = (loCaseInsensitive, loPartialKey);
TLocateOptions = set of TLocateOption;
объявлена в модуле DB.pas. Чтоб юнит, в котором ты даешь Locate увидел эту переменную, добавь в его секцию interface (оператор uses) ссылку
uses ...., DB;
← →
MsGuns © (2003-05-03 23:39) [3]>Zacho © (03.05.03 23:31)
Блин, действительно... Пора домой баиньки :))
← →
Nikos (2003-05-04 09:56) [4]Так я и не понял как объявить TLocateOptions? Я изменил код поиска на вот такой вариант.
DM.Tb.Locate("First",EdText.Text,[loCaseInsensitive]);
>добавь в его секцию interface (оператор uses) ссылку uses ...., DB;
Эта ссылка у меня есть.
Пробовал вписывать предложенный MsGuns © код
TLocateOption = (loCaseInsensitive, loPartialKey);
TLocateOptions = set of TLocateOption;
в раздел var модуля, процедуры, и просто в тело процедур, но появляется ошибки.
← →
sniknik © (2003-05-04 11:20) [5]Nikos (04.05.03 09:56)
> Пробовал вписывать предложенный MsGuns © код
не оттуда начал
uses ...., DB; там все описано, правильно, подключи и все (если действительно не находит а не чтото другое).
← →
sniknik © (2003-05-04 11:25) [6]Nikos (04.05.03 09:56)
> Эта ссылка у меня есть.
сорри не заметил. ну тогда у тебя явно чтото другое. а описывать код
TLocateOption = (loCaseInsensitive, loPartialKey);
TLocateOptions = set of TLocateOption;
где бы то ни было, бессмысленно (раз он уже есть, кстати нужно было в type писать чтобы прошло).
← →
MsGuns © (2003-05-04 11:57) [7]>Nikos (04.05.03 09:56)
1. Какие используются компоненты (TDataBase,TTable,TQuery или другие) ?
2. Где (в каком модуле) объявлены DB-компоненты и в каком модуле оператор Locate (в одном, в разных) ?
3. Приведи полный код юнита, где содержится Locate
← →
Nikos (2003-05-04 12:31) [8]1. Используются компоненты TDataBase,TTable,TDataSource.
2. Эти компонеты объявлены в Data Module. Модуль сохранен под именем DM. Оператор Locate используется пока в одном модуле Unit1(модуль главной формы), но возможно, понадобится его использовать и в других модулях.
3. Полный код юнита займет очень много места, да и объяснять его очень долго. Сообщу только важные моменты. На главной форме находятся 4 TEdit объекта. В них пользователь должен ввести информацию, и нажав на кнопку произвести поиск без учета регистра. Если введенные занчения в БД есть, то операция будет считаться успешной и появится сообщение об успехе.
← →
MsGuns © (2003-05-04 12:38) [9]В списке Uses модуля Unit1 есть DB и DBTables ?
Кроме того, надо чтоб модуль Unit1 "увидел" DM, для чего надо DM также включить в список Uses Unit1.
У того же Фаронова есть другая книжка "Учебный курс Дельфи 6", где неплохо описан прицип "видимости".
← →
MsGuns © (2003-05-04 12:54) [10]По поводу указанной книги Валеия Фаронова (Изд.дом "Питер", 2002)
У меня тоже есть такая. Неплохое пособие для НАЧИНАЮЩИХ и только. Вместо характерных примеров с объяснением СУЩНОСТИ как компонент, так и вообще принципов работы с базами данных - простое перечисление НЕКОТОРЫХ важнейших с т.зр. автора методов и свойств. Приводимые же примеры кода тривиальны и, как правило, почти бесполезны. Ныне практически ею не пользуюсь. Хэлп намного информативнее.
← →
Nikos (2003-05-04 13:23) [11]Всем спасибо! Особую благодарность хотелось бы выразить MsGuns © за помощь в решении моей проблемы.
Наконец-то все получилось.
← →
sunrider (2003-05-05 00:30) [12]Тут нечего мудрить - все ссылки на другие модули должны быть объявлены в любом из uses. А при поиске через Locate
используется вариантный массив аргументов, если число полей поиска больше одного. В противоном случае можно использовать
любую переменную соответствующую типу поля (естественно поле
имеет тип Data , иначе будут ошибки).
Zacho совершенно правильно показал, как нужно делать
DM.Tb.Locate("First;Second",
VarArrayOf([EdText.Text,EdText2.Text]),[loCaseInsensitive]);
Страницы: 1 вся ветка
Текущий архив: 2003.05.26;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.018 c