Главная страница
    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.003 c
7-66376
Dmitry V. Averuanov
2001-10-08 16:17
2002.01.21
Освобождение памяти при завершении процесса.


1-66294
Leviathan
2002-01-05 01:07
2002.01.21
TEdit орет! :-)


14-66343
Dim!S
2001-11-26 08:01
2002.01.21
Список компьютерных фирм


1-66280
Lazyk
2002-01-04 14:57
2002.01.21
Printer accounting


14-66348
asafr
2001-11-22 16:01
2002.01.21
FastReport. Информация к размышлению...





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