![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по Query.Locate. [D5, Paradox, Oracle, ]
Andrey007 © (2001-12-29 10:31:00)Есть статический запрос. Нужно организовывать поиск по разным полям. Если я организовываю поиск по одному вещественному полю, то всё работает нормально, также как и когда поиск происходит по 5 полям, одно из которых символьное (Тип поля Char(25), тип программной переменной - String). Но вот когда я делаю поиск по двум символьным полям (оба типа Char(6)), то этот поиск работает только тогда, когда база является локальной (таблицы типа Paradox), то есть находится на том же компьютере, откуда запускается программа. А если поиск происходит в сетевой БД (сервер Oracle 8), то выполнение строки с Query.Locate приводит к появлению сообщения об ошибке "Operation not applicable.".
В целом дело обстоит так:
procedure Form1.Click(Sender: TObject);
var s1,s2: String;
begin
// тут происходит присвоение s1 и s2
if Query.Locate("CODE1;CODE2",VarArrayOf([s1,s2]),[]) then
begin
[...]
end
end;
s1 и s2 содержат заглавные русские буквы. Длина полей CODE1 и CODE2 - 6 символов. Причём в s1 и s2 в принципе не может быть более 5 букв, также как и в этих полях не может быть более 5 букв. Я предположив, что дело можно исправить дополнением s1 и s2 нужным числом пробелов, вставил перед Query.Locate дополнение пробелами:
if length(s1)<6 then
repeat
s1:=s1+" "
until length(s1)>=6;
if length(s2)<6 then
repeat
s2:=s2+" "
until length(s2)>=6;
Однако это не помогло,- по прежнему выполнение Query.Locate приводило к ошибке. Тогда я попробовал изменить тип s1 и s2 на String[6], но и это не помогло. Также не помогло и убирание добавления пробелов к s1 и s2 в испостаси String[6].
Что делать?
Andrey007 (2002-01-11 10:25:00) [1]OCIW32.DLL я тоже пробовал. Тоже не работает.
fnatali (2002-01-11 07:00:00) [2]>Andrey007
А ты попробуй не менять VENDOR INIT из списка, а посмотри прямо в оракловом клиенте на своей машине, какая используется dll и напиши её ручками. У меня, например, для Oracle 8.1.7 используется c:\orawin95\bin\ociw32.dll
Не знаю, поможет тебе это или нет.
Val (2002-01-10 18:47:00) [3]Да..прошу прощения за предыдущие сообщения - почему-то упорно не замечал, что локейт идет по квери (торможу...):((
Andrey007 (2002-01-10 18:21:00) [4]P.S. Вот точное значение NLS_LANG = RUSSIAN_CIS.CL8MSWIN1251
Andrey007 (2002-01-10 18:16:00) [5]Короче, ходил я к админу БД, он сказал, что дело не в Oracle, а в настройках BDE. Он определил это по сообщению, которое выдаёт Delphi, когда происходит эта ошибка. Сообщение такое:
Project R.exe raised exception class EDBEngineError with message "Operation not applicable." Process stopped. Use Step or Run to continue.
При запуске exe-файла, соответственно, выскакивает только "Operation not applicable."
В настройках BDE я пробовал менять Configuration->Drivers->Native->Oracle->VENDOR INIT. Было ORA805.DLL, админ посоветовал поставить OCI.DLL. Не помогло. Также пробовал менять на другие DLL, которые были в вываливающемся списке. Тоже не помогло.
Val (2002-01-10 13:28:00) [6]>Andrey007 (10.01.02 09:53)
я говорил не про запрос, а про поиск-select..., а потом проверка на пустоту Query..
panov (2002-01-10 11:00:00) [7]>Andrey007 (10.01.02 09:53)
У меня именно сервер ORCALE и используется.
oname (2002-01-10 10:45:00) [8]Возможно, это связано с тем, что набор данных не полностью кэширован на локальной машине. Попробуй перед Query.Locate вызвать Query.RecordCount. Это закачает весь набор на машину. Только придется подождать, если набор большой.
Andrey007 (2002-01-10 09:53:00) [9]2 Val: именно SQL я и использую для написания этого запроса.
2 Yuvich: NLS_LANG в реестре в настройках клиента Oracle везде, кроме одного места стоял RUSSIAN_CIA.MSWIN1251 (цитирую неточно, поскольку пишу по памяти), я исправил в том месте, где стояло NLS_LANG=NA.
NLS_SORT в реестре я не нашёл и установил её как переменную среды в WinNT NLS_SORT=binary. Всё равно та же самая ошибка.
2 panov: при использовании BDE в локальном варианте у меня тоже всё нормально работает, а в сети при использовании сервера Oracle,- нет.
panov (2001-12-29 14:25:00) [10]Какой движок используешь?
При использовании BDE у меня такой вариант работает.
Yuvich (2001-12-29 13:17:00) [11]Попробуй вместо русских букв использовать латинские, если будет работать, то дело в локалях - или NLS_LANG или NLS_SORT или что-то подобное.
Val (2001-12-29 10:43:00) [12]используйте SQL