Перехватить SQL-запрос

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
S.H.S
Сообщения: 65
Зарегистрирован: 25 ноя 2005, 02:18

Перехватить SQL-запрос

Сообщение S.H.S » 20 ноя 2006, 13:16

Я использую Delphi+FIBPlus+EhLib. Запрос у меня примерно такой:

Код: Выделить всё

 SELECT * FROM base
 WHERE  sell_date>=:date1 AND sell_date<=:date2 AND
 /*FILTER*/ 1=1 
 ORDER BY num
Вопрос: Как я могу перехватиь уже готовый запрос с подставленными параметрами, сортировками и фильтрами EhLib. Как получить такой:

Код: Выделить всё

 SELECT * FROM base
 WHERE  sell_date>='01.01.2006' AND sell_date<='01.10.2006' AND
    name='NAME'
 ORDER BY name
QSelect.ReadySQLText не помогает.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 20 ноя 2006, 14:40

Никакие SQLText тебе не помогут, потому как такой текст никогда не собирается.
Параметры передаются на сервер независимо от текста запроса.

S.H.S
Сообщения: 65
Зарегистрирован: 25 ноя 2005, 02:18

Сообщение S.H.S » 20 ноя 2006, 15:11

А что тогда может помочь? Как то же работают SQL мониторы.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 ноя 2006, 14:46

S.H.S писал(а):А что тогда может помочь? Как то же работают SQL мониторы.
А ты никогда не видел, что ли? Именно так и работают, всё по очереди.

Код: Выделить всё

SQL Prepare: INTRBASE - select * from Table1 where id=?
SQL Vendor: INTRBASE - isc_dsql_allocate_statement
SQL Vendor: INTRBASE - isc_dsql_prepare
SQL Vendor: INTRBASE - isc_dsql_sql_info
SQL Vendor: INTRBASE - isc_vax_integer
SQL Data In: INTRBASE - Param = 1, Name = , Type = fldINT32, Precision = 0, Scale = 0, Data = 8
SQL Vendor: INTRBASE - isc_dsql_execute
SQL Stmt: INTRBASE - Fetch
Ты можешь точно так же мониторить, и когда увидел execute, собрать запрос в текстовый вид.

Ответить