Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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 проходит, но ничего не меняет при этом.
Ладно, буду копать дальше. Спасибо за советы.



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

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

Наверх




Память: 0.47 MB
Время: 0.004 c
4-66408
YUS
2001-11-21 20:52
2002.01.21
CreateDialog -????


3-66188
Sergiom
2001-12-14 08:21
2002.01.21
Не могу сделать refresh data.


3-66207
borisich
2001-12-16 18:51
2002.01.21
Какой лучше формат СУБД использовать для локальных


3-66199
Grey
2001-12-12 18:43
2002.01.21
Interbase и потоки


7-66368
BorisMurmansk
2001-10-01 15:29
2002.01.21
asm in/out





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский