Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по Query.Locate.   Найти похожие ветки 

 
Andrey007   (2001-12-29 10:31) [0]

Есть статический запрос. Нужно организовывать поиск по разным полям. Если я организовываю поиск по одному вещественному полю, то всё работает нормально, также как и когда поиск происходит по 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].

Что делать?


 
Val   (2001-12-29 10:43) [1]

используйте SQL


 
Yuvich   (2001-12-29 13:17) [2]

Попробуй вместо русских букв использовать латинские, если будет работать, то дело в локалях - или NLS_LANG или NLS_SORT или что-то подобное.


 
panov   (2001-12-29 14:25) [3]

Какой движок используешь?
При использовании BDE у меня такой вариант работает.



 
Andrey007   (2002-01-10 09:53) [4]

2 Val: именно SQL я и использую для написания этого запроса.

2 Yuvich: NLS_LANG в реестре в настройках клиента Oracle везде, кроме одного места стоял RUSSIAN_CIA.MSWIN1251 (цитирую неточно, поскольку пишу по памяти), я исправил в том месте, где стояло NLS_LANG=NA.
NLS_SORT в реестре я не нашёл и установил её как переменную среды в WinNT NLS_SORT=binary. Всё равно та же самая ошибка.

2 panov: при использовании BDE в локальном варианте у меня тоже всё нормально работает, а в сети при использовании сервера Oracle,- нет.


 
oname   (2002-01-10 10:45) [5]

Возможно, это связано с тем, что набор данных не полностью кэширован на локальной машине. Попробуй перед Query.Locate вызвать Query.RecordCount. Это закачает весь набор на машину. Только придется подождать, если набор большой.


 
panov   (2002-01-10 11:00) [6]

>Andrey007 (10.01.02 09:53)
У меня именно сервер ORCALE и используется.


 
Val   (2002-01-10 13:28) [7]

>Andrey007 (10.01.02 09:53)
я говорил не про запрос, а про поиск-select..., а потом проверка на пустоту Query..


 
Andrey007   (2002-01-10 18:16) [8]

Короче, ходил я к админу БД, он сказал, что дело не в 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, которые были в вываливающемся списке. Тоже не помогло.


 
Andrey007   (2002-01-10 18:21) [9]

P.S. Вот точное значение NLS_LANG = RUSSIAN_CIS.CL8MSWIN1251


 
Val   (2002-01-10 18:47) [10]

Да..прошу прощения за предыдущие сообщения - почему-то упорно не замечал, что локейт идет по квери (торможу...):((


 
fnatali   (2002-01-11 07:00) [11]

>Andrey007
А ты попробуй не менять VENDOR INIT из списка, а посмотри прямо в оракловом клиенте на своей машине, какая используется dll и напиши её ручками. У меня, например, для Oracle 8.1.7 используется c:\orawin95\bin\ociw32.dll
Не знаю, поможет тебе это или нет.


 
Andrey007   (2002-01-11 10:25) [12]

OCIW32.DLL я тоже пробовал. Тоже не работает.



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

Форум: "Базы";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.103 c
6-18945
Hawk
2001-11-13 18:49
2002.02.07
Connect между TServerSocket и TClientSocket по сети


7-18996
T2
2001-10-29 17:04
2002.02.07
Эквалайзер


6-18938
ZserG
2001-11-18 02:23
2002.02.07
Как вставить инструментальную панель в Explorer?


4-19033
B@Nt
2001-12-11 19:23
2002.02.07
Привет APIшники !!! У меня крутой вопрос


4-19038
Tosov
2001-09-13 11:44
2002.02.07
Event Log





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский