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




Вниз

Через ADO+ODBC к INFORMIX 


Mute   (2001-12-18 13:08) [0]

Всем привет.

Не подскажет ли кто-нибудь как выйти из ситуации.
Выполняю запрос к БД INFORMIX с помощью утилиты Query Tool, работающей через ODBC. Запрос при этом идет примерно 13 сек.
Тот же запрос, выполняемый из Delphi (ADOQuery) через ODBC, идет примерно 14 мин.
ADO конечно все замедляет. Но нельзя ли уменьшить время запроса?



Delirium   (2001-12-18 13:54) [1]

А сколько запрос работает в TQuery ?



Mute   (2001-12-18 14:35) [2]

Тоже, как и в Query Tool, примерно секунд 13.



Delirium   (2001-12-18 14:41) [3]

Тогда, дело действительно в настройках ADO-соединения, посмотри CursorType и CursorLocation, самый быстрый вариант:
CursorType=ctStatic
CursorLocation=clUseClient



Mute   (2001-12-18 15:21) [4]

То же самое.



Delirium   (2001-12-18 15:23) [5]

Попробуй
CursorLocation=clUseServer



Mute   (2001-12-18 15:45) [6]

В принципе так работает. Даже быстрее, чем просто через ODBC или BDE, но не выводит на DBGrid и не позволяет делать Last, Prior.



Delirium   (2001-12-18 16:04) [7]

Собственно, CursorLocation указывает где будет создан RecordSet на сервере или на клиенте, естественно если резльтат запроса - огромный, то прокачка по сети займёт время. Каков примерный объём (в Mb) возвращаемой информации ?



Mute   (2001-12-18 16:44) [8]

Да там "копейки": всего 71 запись. Я думаю, что это связано с особенностями Informix. При выводе DataSetа на Grid ругается: не могу использовать bookmark с множеством записей. При Last: не могу двигаться по курсору в обратном направлении, хотя While not EOF do Next; отрабатывает. При Prior: недопустимо в данном контексте. И еще RecordCount не возвращается (=-1).



Delirium   (2001-12-18 16:47) [9]

А запрос покажи, я не пойму как он может работать 14 мин. только потому, что RecordSet - локальный!



Mute   (2001-12-18 17:08) [10]

select E.ccy as CCY, T.doc_type as DOC_TYPE, T.transfer_type as TRANSFER_TYPE, E.db_acc_l0 as DB_ACC_L0,
E.cr_acc_l0 as CR_ACC_L0, sum(E.amount) as TOTAL, count(*) as amount
from et_wrk_b200 E, tr_wrk_00 T
where E.cr_acc_l0 in ("20206","20202")
and T.tran_id=E.tran_id
and E.entry_date between "08.01.1998" and "08.01.1998"
group by E.ccy, T.doc_type, T.transfer_type, E.db_acc_l0, E.cr_acc_l0



Delirium   (2001-12-18 17:34) [11]

Попрбуй так:

select E.ccy as CCY, T.doc_type as DOC_TYPE, T.transfer_type as TRANSFER_TYPE, E.db_acc_l0 as DB_ACC_L0,
E.cr_acc_l0 as CR_ACC_L0, sum(E.amount) as TOTAL, count(*) as amount
from et_wrk_b200 E

join tr_wrk_00 T on T.tran_id=E.tran_id

where E.cr_acc_l0 in ("20206","20202")
and E.entry_date between "08.01.1998" and "08.01.1998"
group by E.ccy, T.doc_type, T.transfer_type, E.db_acc_l0, E.cr_acc_l0



Mute   (2001-12-18 18:14) [12]

А так он вообще не ест. Говорит - ошибка синтаксиса.



Delirium   (2001-12-18 18:31) [13]

Я не знаю, как работает INFORMIX, но в MSSQL join-ы существенно ускоряют работу в сложных запросах. Я думаю синтаксис должен быть похожий - надо тебе поэкспериментировать или инфу по INFORMIX-овскому SQL почитать.



Mute   (2001-12-19 10:50) [14]

Да, видимо все-таки это тот самый случай (когда надо читать доки). :)
Еще одна интересная фича обнаружилась. Если делать While not EOF do Next; ,
то сканируются все записи. А вот ежели сделать First, то прыгаем на 2-ю запись. Prior после First проходит, но ничего не меняет при этом.
Ладно, буду копать дальше. Спасибо за советы.




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




Наверх





Память: 0.74 MB
Время: 0.013 c
1-66289           LAlex                 2002-01-04 18:38  2002.01.21  
Искуственный интеллект


3-66216           Kaster                2001-12-18 21:12  2002.01.21  
Помогите пожайлуста! Мне надо, чтобы после поиска, найденная запись стала первой в DBGrid е!


1-66286           Строр                 2002-01-04 15:23  2002.01.21  
опять про трей


3-66190           dimsfdf               2001-12-17 14:44  2002.01.21  
А какой сейчас самый свежий ORACLE?


6-66320           Yuraz                 2001-10-27 16:01  2002.01.21  
Люди, подскажите, как получить IP адрес веб сайта!!!