Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5 / 17 сообщений из 17, страница 1 из 1
16.04.2018, 14:36
    #39630829
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
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
16.04.2018, 14:38
    #39630833
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
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
16.04.2018, 14:45
    #39630838
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
defecatorq.Close ;
q.ParamByName(
q.Open

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

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

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


(CODE - поле типа VARCHAR2(3))
...
Рейтинг: 0 / 0
16.04.2018, 16:09
    #39630930
devart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
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
16.04.2018, 16:23
    #39630943
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
devart,

Спасибо, я подумаю над вашим предложением.
...
Рейтинг: 0 / 0
16.04.2018, 16:30
    #39630949
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
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
16.04.2018, 17:04
    #39630983
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
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
16.04.2018, 17:31
    #39631009
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Коллеги, пните в нужном направлении с использованием TOraQuery в ODAC и Delphi XE5
schi,

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

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


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

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


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