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