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

Вниз

Не работает Locate!   Найти похожие ветки 

 
Snake   (2002-05-06 16:12) [0]

Здравствуйте! Что такое - в ClientDataSet не работает метод Locate на русском языке. Причем компилирую на другой машине - все нормально, exe работает на моей. Кто знает, в чем дело? Спрашивал в конференции по БД - никто не отвечает :(


 
Кулюкин Олег   (2002-05-06 16:48) [1]

У меня работает
CDS1.Locate("Field1","искомый текст", [loCaseInsensitive]);

А какие-нибудь опции указывали?


 
Snake   (2002-05-07 15:58) [2]

Да вот то-то и оно, что точно так и делаю :( Почему - сам не знаю. Может быть где-нить в языковых настройках это делается?


 
Кулюкин Олег   (2002-05-07 16:32) [3]

В Win2k в региональных опциях выбираются языковые настройки.
У меня кириллица по умолчанию.

Правда, у меня D5


 
Andrey007   (2002-05-08 10:05) [4]

2Snake: А Вы, небось, через BDE работаете? И что за СУБД?


 
Кулюкин Олег   (2002-05-08 10:25) [5]

2 Andrey007 (08.05.02 10:05)
ClientDataSet не должен зависеть от версии BDE или типа СУБД.


 
Andrey007   (2002-05-08 10:36) [6]

Конечно, не должен. Однако практика показывает, что это не всегда так.


 
Кулюкин Олег   (2002-05-08 11:02) [7]

2 Andrey007 (08.05.02 10:36)
Считал ClientDataSet достаточно безглючным компонентом.
Вы знаете его подводные камни?
Расскажите?
Я как раз на нем делал эмуляцию БД (сохранение информации в файл/чтение).
Перед этим тестировал его, все было ОК.


 
Andrey007   (2002-05-08 12:50) [8]

Я использовал метод TQuery.Locate. Он нормально работал с Paradox"овскими таблицами, но в случае работы с Oracle"освкими выдавал ошибку "Operation not applicable" при поиске по двум полям символьного типа, содержащими русские буквы. Проблему решил использованием компонент прямого доступа к Oracle (Direct Oracle Access). Насчёт ClientDataSet. У него та же ошибка - он же наследник TDataSet, как и TQuery, только для TQuery TDataSet является предком более высокого уровня, чем для TDataSet. TClientDataSet - прямой наследник TDataSet, а TQuery - наследник третьего уровня (TQuery - TDBDataSet - TBDEDataSet - TDataSet). А функция Locate находится в разделе public класса TDataSet, хотя там она виртуальная и всегда возвращает False. По-нормальному она прописана в классе TBDEDataSet, и, соответственно, в TClientDataSet, причём они прописаны однаковыми, в чём Вы можете убедиться:

function TClientDataSet.Locate(const KeyFields: string;
const KeyValues: Variant; Options: TLocateOptions): Boolean;
begin
DoBeforeScroll;
Result := LocateRecord(KeyFields, KeyValues, Options, True);
if Result then
begin
Resync([rmExact, rmCenter]);
DoAfterScroll;
end;
end;

function TBDEDataSet.Locate(const KeyFields: string;
const KeyValues: Variant; Options: TLocateOptions): Boolean;
begin
DoBeforeScroll;
Result := LocateRecord(KeyFields, KeyValues, Options, True);
if Result then
begin
Resync([rmExact, rmCenter]);
DoAfterScroll;
end;
end;

Если сравните функции LocateRecord обоих классов, то увидите, что они аналогично. Наверное написали один раз и размножили.


 
Snake   (2002-05-09 15:27) [9]

Спасибо всем, ребята, правда вот все равно ничего не получается :( А не может ли это быть из-за того, что у меня установлен dxDBGrid и прочие dx-овские компоненты?



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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
1-97216
Kabal
2002-05-18 06:47
2002.05.30
Перенос строк в RadioGrup


3-97117
Oleg-2
2002-05-09 16:43
2002.05.30
Сохранение базы данных


3-97184
MVVD
2002-05-08 09:19
2002.05.30
Locate


14-97397
Ginger
2002-04-22 00:46
2002.05.30
Помогите!!!


1-97242
Сатир
2002-05-18 23:03
2002.05.30
Динамическое определение событий