Страница 1 из 1

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

Добавлено: 20 ноя 2006, 13:16
S.H.S
Я использую 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 не помогает.

Добавлено: 20 ноя 2006, 14:40
WildSery
Никакие SQLText тебе не помогут, потому как такой текст никогда не собирается.
Параметры передаются на сервер независимо от текста запроса.

Добавлено: 20 ноя 2006, 15:11
S.H.S
А что тогда может помочь? Как то же работают SQL мониторы.

Добавлено: 21 ноя 2006, 14:46
WildSery
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, собрать запрос в текстовый вид.