Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
4-83791
jen_bond
2003-03-25 20:28
2003.05.26
Вопрос по работе с EnumEnhMetaFile


6-83638
Danger
2003-03-29 17:11
2003.05.26
TWebBrowser


4-83796
MUHAMOR
2003-03-24 08:10
2003.05.26
Класс окна EDIT


14-83649
BillMustDie
2003-05-05 00:11
2003.05.26
E-mail Билла Гейтса срочно!!!!


3-83422
ArtemB
2003-05-07 09:26
2003.05.26
Фильтр на базу