powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
17 сообщений из 17, страница 1 из 1
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630829
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ODAC версии 9.2.5

Есть запрос:

Код: plsql
1.
2.
3.
4.
5.
select a.foo || '=' || a.bar foobar, 
       UPPER(a.bazz) bazz 
  from foo a
 where a.guid = UPPER(:guid)
 order by a.foo



Есть код:

Q: TOraQuery

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  DB.Connected := True;
  q.Prepare;
  q.ParamByName('guid').AsString := '{0130B1D6-7B7B-4EE1-A409-49A2CD678EEB}';
  q.Open;
  ShowMessageFmt('Rowcount = %d', [q.RecordCount]);
  try
  if q.Eof then
    ShowMessage('Eof')
  else
    ShowMessage(q.FieldByName('FOOBAR').AsString);
  finally
    q.Close;
  end;



Если строка q.Prepare закомментирована, то выполнение запроса выдает нужное число строк и, соответственно, нужное поле.
Если строка q.Prepare оставлена, то выполнение запроса выдает нулевое число строк и, соответственно, Eof.

Код переводится на использование ODAC с других компонентов, для предыдущих наличие вызова Prepare было обязательным, запрос выполняется многократно.

TOraSQL со строковыми параметрами и другими запросами работает, как надо, TOraQuery с параметром типа ftInteger и другим запросом работает как надо.

Пробовал задавать параметр в design-time как String, как Widestring и не задавать вообще, никакого влияния.
Пробовал убирать из запроса функцию UPPER для параметра, никакого влияния.
Поиск в гугле по ToraQuery.prepare failed не дал вменяемых результатов.
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630833
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
schiODAC версии 9.2.5

Есть запрос:

Код: plsql
1.
2.
3.
4.
5.
select a.foo || '=' || a.bar foobar, 
       UPPER(a.bazz) bazz 
  from foo a
 where a.guid = UPPER(:guid)
 order by a.foo




Есть код:

Q: TOraQuery

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  DB.Connected := True;
  q.Prepare;
  q.ParamByName('guid').AsString := '{0130B1D6-7B7B-4EE1-A409-49A2CD678EEB}';
  q.Open;
  ShowMessageFmt('Rowcount = %d', [q.RecordCount]);
  try
  if q.Eof then
    ShowMessage('Eof')
  else
    ShowMessage(q.FieldByName('FOOBAR').AsString);
  finally
    q.Close;
  end;




Если строка q.Prepare закомментирована, то выполнение запроса выдает нужное число строк и, соответственно, нужное поле.
Если строка q.Prepare оставлена, то выполнение запроса выдает нулевое число строк и, соответственно, Eof.

Код переводится на использование ODAC с других компонентов, для предыдущих наличие вызова Prepare было обязательным, запрос выполняется многократно.

TOraSQL со строковыми параметрами и другими запросами работает, как надо, TOraQuery с параметром типа ftInteger и другим запросом работает как надо.

Пробовал задавать параметр в design-time как String, как Widestring и не задавать вообще, никакого влияния.
Пробовал убирать из запроса функцию UPPER для параметра, никакого влияния.
Поиск в гугле по ToraQuery.prepare failed не дал вменяемых результатов.

q.Close ;
q.ParamByName(
q.Open
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630838
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorq.Close ;
q.ParamByName(
q.Open

Никакого эффекта. TOraQuery изначально неактивен. Если убрать Prepare, выдаются нужные результаты.
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630849
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
schidefecatorq.Close ;
q.ParamByName(
q.Open

Никакого эффекта. TOraQuery изначально неактивен. Если убрать Prepare, выдаются нужные результаты.
Никогда не сталкивался с такой ситуацией, Prepare вообще нигде не использую, чтобы данные получить.
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630880
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiПоиск в гугле по ToraQuery.prepare failed не дал вменяемых результатов.
Включи детальную трассировку сессии в оракле и проверь - что на самом деле приходит в Оракл и что он возвращает. Это даст направление, куда копать дальше.
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630884
Фотография devart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,
Был бы неплохо увидеть структуру таблицы FOO (скрипт на создание). И проверьте на последней версии ODAC 10.1.5, возможно все уже давно пофикшено.
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630900
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
devartschi,
Был бы неплохо увидеть структуру таблицы FOO (скрипт на создание). И проверьте на последней версии ODAC 10.1.5, возможно все уже давно пофикшено.

Это view, кроме того, я не уполномочен выкладывать DDL в публичный доступ, а маскировать имена муторно. Если пофикшено, то было неплохо ознакомиться со списком пофикшенных проблем, обновлением занимается отдельный персонал, требуется обоснование.

softwarerВключи детальную трассировку сессии в оракле и проверь - что на самом деле приходит в Оракл и что он возвращает. Это даст направление, куда копать дальше.


Это, увы, не просто, но если ничего не поможет, то придется, конечно. По меньшей мере в ODAC-овском DBMonitor криминала не замечено, все параметры имеют нужное значение, на Prepare пустое, на Execute заданное.

Что интересно, если строковый параметр не в WHERE-клаузе, то запрос отрабатывает нормально с вызовом Prepare и без него.

Код: plsql
1.
2.
3.
4.
select foo, bar, bazz,  
foobar.foobazz(foo, :p_foo) as foobazz 
from foofoo
order by foo
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630923
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На обычной таблице запрос такого типа отрабатывает, как следует, как с вызовом Prepare, так и без него.

Код: plsql
1.
SELECT * FROM CITIES WHERE CODE = :CODE


(CODE - поле типа VARCHAR2(3))
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630930
Фотография devart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiЭто view, кроме того, я не уполномочен выкладывать DDL в публичный доступ, а маскировать имена муторно. Если пофикшено, то было неплохо ознакомиться со списком пофикшенных проблем, обновлением занимается отдельный персонал, требуется обоснование.
список исправлений можно найти здесь https://www.devart.com/odac/revision_history.html
если вы не хотите предоставлять DDL на создание таблицы и VIEW, то мы не можем самостоятельно проверить, воспроизводится ли описанная вами проблема на последней версии ODAC. с другой стороны, вы можете сами скачать последнюю версию ODAC здесь https://www.devart.com/odac/download.html и проверить, если проблема исправлена, то принимать решение об обновлении, если нет, то выслать DDL к нам в саппорт, чтобы мы воспроизвели и исправили баг.
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630943
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
devart,

Спасибо, я подумаю над вашим предложением.
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630949
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
devart,

Один момент, как мне потом вернуться на существующую версию 9.2.5 ?

---------------------------
Setup
---------------------------
Setup has detected already installed Odac 9.2.5



Do you wish to upgrade to ODAC 10.1.5 Trial Edition?
---------------------------
Да Нет
---------------------------
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39630983
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerschiПоиск в гугле по ToraQuery.prepare failed не дал вменяемых результатов.
Включи детальную трассировку сессии в оракле и проверь - что на самом деле приходит в Оракл и что он возвращает. Это даст направление, куда копать дальше.

Трассировка конечно показала, что задница стряслась,
без Prepare:

BINDS #140210961257304:
Bind#0
oacdty=01 mxl=128(38) mxlc=38 mal=00 scl=00 pre=00
oacflg=01 fl2=1000010 frm=01 csi=171 siz=128 off=0
kxsbbbfp=7f8568845a00 bln=128 avl=38 flg=05
value="{0130B1D6-7B7B-4EE1-A409-49A2CD678EEB}"

c Prepare

BINDS #139746432824136:
Bind#0
oacdty=01 mxl=4000(38) mxlc=00 mal=00 scl=00 pre=00
oacflg=01 fl2=1000010 frm=01 csi=171 siz=4000 off=0
kxsbbbfp=7f1940700448 bln=4000 avl=02 flg=05
value="?"

Но не копаться же мне в кишках ODAC...
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39631009
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

Н-да, красиво. Ну значит действительно ставь одак десятку куда-нибудь в песочницу и проверяй, исправили или нет.
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39631012
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил на запросе к view:

Код: sql
1.
2.
3.
4.
  qData.Close;
  qData.Prepare;
  qData.ParamByName('code').AsString := VarToStr(Code);
  qData.Open;


ODAC 10.0.1, проблема не воспроизвелась.
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39631018
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,
Спасибо, буду разбираться, что легче: песочницу организовать или обновится официально и пинать уже devart на последней версии.
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39631021
Фотография devart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schidevart,
Один момент, как мне потом вернуться на существующую версию 9.2.5 ?

Сделать Uninstall версии 10.1.5 и заново проинсталировать 9.2.5. Или, как посоветовали выше, проверить все в "песочнице" (на виртуалке).
...
Рейтинг: 0 / 0
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
    #39646092
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После обновления ODAC до версии 10.1.5 непонятное поведение исчезло и все работает, как задумано.
Всем спасибо.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]