Главная страница
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.013 c
3-97194
wed
2002-05-08 15:25
2002.05.30
ADO - значение ConnectionString


1-97280
VID
2002-05-17 16:48
2002.05.30
Лезем в облась памяти, выделенной для чужого приложения


1-97284
Dmitriy_R
2002-05-18 16:25
2002.05.30
Запус программы как сервис в Win2000


3-97119
Oleg_er
2002-05-06 07:26
2002.05.30
В чем ошибка? - ругается на несовместимость типов!


1-97224
lak_b
2002-05-20 15:45
2002.05.30
орять Hook