Delphi: как получить запрос, который передается на сервер при использовании параметров - PullRequest
4 голосов
/ 02 сентября 2010

У меня есть запрос с параметрами внутри Devart TMSQuery.SQL. Что-то вроде

select * from customers
where customer = :CustomerID

в коде, который я делаю

// Delphi
sqlcustomer.ParamByName('CustomerID').asinteger := 4;
sqlcustomer.open;

Я хочу отладить и увидеть точную команду sql, отправленную на сервер, если я пытаюсь использовать TMSQuery.sql, у меня просто есть: CustomerID, хотя я хотел бы иметь это:

select * from customers
where customer = 4

Есть ли быстрый способ получить это, не читая все параметры и не восстанавливая вручную запрос?

Конечно, у меня очень большой запрос с более чем 100 параметрами, поэтому мне нужно это

Ответы [ 2 ]

4 голосов
/ 02 сентября 2010

Фактический оператор SQL параметризованного запроса, отправляемого на сервер, никогда не содержит текстового представления значений параметров. Вместо этого он использует символы-заполнители, например, вопросительные знаки. В вашем примере это будет select * from customers where customer = ? Это готовится на сервере, а значения параметров затем отправляются клиентом в отдельном вызове.

3 голосов
/ 02 сентября 2010

Если вы используете компоненты Devart, то у них есть компонент TMSSQLMonitor, который может помочь.Если вы подключаетесь через odbc, вы можете отслеживать sql, включив трассировку на вкладке odbc.

Если вы используете какую-то другую комбинацию, пожалуйста, опишите.

...