Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить текст запроса TSQLQuery с учетом подставленных параметров / 25 сообщений из 26, страница 1 из 2
17.06.2014, 08:12
    #38671197
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
Использую компонент TSQLQuery. Необходимо выводить в лог текст запроса. Если выводить просто свойство SQL.Text, то в нем будут встречаться имена параметров (:ParamName, :ParamName2 и т.д.), но не их значения. Как получить текст запроса с уже подставленными параметрами?
...
Рейтинг: 0 / 0
17.06.2014, 09:08
    #38671252
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
Interloper, параметры на то и параметры, что они отправляются не в виде текста.
...
Рейтинг: 0 / 0
17.06.2014, 09:48
    #38671304
Kotъ-Begemotъ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
InterloperИспользую компонент TSQLQuery. Необходимо выводить в лог текст запроса. Если выводить просто свойство SQL.Text, то в нем будут встречаться имена параметров (:ParamName, :ParamName2 и т.д.), но не их значения. Как получить текст запроса с уже подставленными параметрами?

До вызова Query.Execute (или Open) написать вывод своего запроса в виде сообщения, с подстановкой нужных параметров:

Код: pascal
1.
ShowMessage(Format('SELECT .... FROM SOMETABLE ST WHERE ST.SFIELD1=%s AND ST.SFIELD2=%d ... ', [Par1Value, Par2Value]));
...
Рейтинг: 0 / 0
17.06.2014, 09:49
    #38671305
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
InterloperИспользую компонент TSQLQuery. Необходимо выводить в лог текст запроса. Если выводить просто свойство SQL.Text, то в нем будут встречаться имена параметров (:ParamName, :ParamName2 и т.д.), но не их значения. Как получить текст запроса с уже подставленными параметрами?

а что показать, если параметр типа БЛОБ ? может лучше подумать прежде чем спросить?
...
Рейтинг: 0 / 0
17.06.2014, 09:56
    #38671319
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
MaratIsk,
Я знаю, что спрашиваю. У меня нет параметров BLOB. Да и если бы были, их тоже можно представить в текстовом виде, если что.
...
Рейтинг: 0 / 0
17.06.2014, 09:58
    #38671320
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
InterloperЯ знаю, что спрашиваю.
Протестую.
...
Рейтинг: 0 / 0
17.06.2014, 09:59
    #38671321
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
InterloperMaratIsk,
Я знаю, что спрашиваю. У меня нет параметров BLOB. Да и если бы были, их тоже можно представить в текстовом виде, если что.

да???????????????????????????????
...
Рейтинг: 0 / 0
17.06.2014, 10:01
    #38671325
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
Interloper,

судя по всему ты смутно представляешь как обрабатываются параметры запроса
...
Рейтинг: 0 / 0
17.06.2014, 10:09
    #38671341
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
InterloperИспользую компонент TSQLQuery. Необходимо выводить в лог текст запроса. Если выводить просто свойство SQL.Text, то в нем будут встречаться имена параметров (:ParamName, :ParamName2 и т.д.), но не их значения. Как получить текст запроса с уже подставленными параметрами?Изменить вызов. Например сделав его 'exec sp_executesql' для mssql
...
Рейтинг: 0 / 0
17.06.2014, 12:04
    #38671507
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
MaratIskа что показать, если параметр типа БЛОБ ? может лучше подумать прежде чем спросить?Например, показать первые 16 байт в Hex виде
...
Рейтинг: 0 / 0
17.06.2014, 12:14
    #38671528
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
wadmanInterloperЯ знаю, что спрашиваю.
Протестую.
Какой умный совет. Вы прямо очень помогли, спасибо.
...
Рейтинг: 0 / 0
17.06.2014, 12:18
    #38671543
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
Interloperwadmanпропущено...

Протестую.
Какой умный совет. Вы прямо очень помогли, спасибо.
Еще раз:
wadmanпараметры на то и параметры, что они отправляются не в виде текста.
Их значения даже на стороне сервера в дампе запроса не увидеть (с наскоку).
...
Рейтинг: 0 / 0
17.06.2014, 12:25
    #38671564
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
MaratIsk,
Я отлично понимаю, как обрабатываются запросы с параметрами, как формируется и хранится структура XSQLDA.
А ты что, решил выпендриться, показать какой ты дохрена умный, чтобы свысока указывать мне, что я чего-то не знаю, а ты знаешь? В этом смысл твоего поста.
...
Рейтинг: 0 / 0
17.06.2014, 14:50
    #38671853
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
InterloperMaratIsk,
Я отлично понимаю, как обрабатываются запросы с параметрами, как формируется и хранится структура XSQLDA.
А ты что, решил выпендриться, показать какой ты дохрена умный, чтобы свысока указывать мне, что я чего-то не знаю, а ты знаешь? В этом смысл твоего поста.

я помогаю тебе понять абсурдность InterloperКак получить текст запроса с уже подставленными параметрами
...
Рейтинг: 0 / 0
17.06.2014, 15:02
    #38671877
MaratIsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
Interloper,

ты серьезно думаешь, что клиентская библиотека субд склеивает текст запроса из значений параметров?
...
Рейтинг: 0 / 0
17.06.2014, 16:57
    #38672062
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
MaratIsk,
Нет, не думаю.
...
Рейтинг: 0 / 0
17.06.2014, 16:59
    #38672064
Interloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
MaratIsk,

Абсурдности здесь нет. Я подразумевал, что может быть существует некая отладочная функция, которая позволяет получить текст запроса со значениями вместо плейсхолдеров. Если не существует - так и ответьте. Демагогию разводить не следует.
...
Рейтинг: 0 / 0
17.06.2014, 20:51
    #38672359
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
Interloper,
параметры не подсталяются, они передаются отдельно от запроса
...
Рейтинг: 0 / 0
17.06.2014, 21:13
    #38672370
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
InterloperЯ подразумевал, что может быть существует некая отладочная функция,
которая позволяет получить текст запроса со значениями вместо плейсхолдеров. Если не
существует - так и ответьте.
Отвечаю: не существует. Обломись.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.06.2014, 07:06
    #38672502
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
Dimitry SibiryakovInterloperЯ подразумевал, что может быть существует некая отладочная функция,
которая позволяет получить текст запроса со значениями вместо плейсхолдеров. Если не
существует - так и ответьте.
Отвечаю: не существует. Обломись.

Но можно наваять самому.
...
Рейтинг: 0 / 0
18.06.2014, 08:45
    #38672529
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
goldmi45Но можно наваять самому.
+1.
У себя давно написали велосипед он может не всегда сработать и чуток испортить SQL :)
но в 99% случаях упрощает отладку - т.к. достаточно скопировать запрос в PL/SQL Developer и он выполнится
алгоритм очень тупой - ищем :ParamName и заменяем на /*:ParamName*/ 123
...
Рейтинг: 0 / 0
18.06.2014, 09:07
    #38672539
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
PPAно в 99% случаях упрощает отладку - т.к. достаточно скопировать запрос в PL/SQL Developer и он выполнится
Вообще-то у оракла есть и свои средства, которые ничего не портят.
...
Рейтинг: 0 / 0
20.06.2014, 11:42
    #38675194
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
Interloper,

разве проблема?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
with AQuery do 
begin

  LogSQL := SQL.Text;

  for i := 0 to High(Param) do
    LogSQL := YourLikeReplaceStringFunction(LogSQL, VarToStr(Param[i]){что заменить}, VarToStr(Values[i]){чем заменить});

end;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
09.08.2019, 01:26
    #39847268
Alexander Rogan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
Вот она та самая, что возможно поможет.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
function SQLParamsToSQL(Q:TQuery):string;
var LogSQL, nam,val:string;
   i:integer;
   function ch_point(v:string):string;
   begin
     if pos(',',v)>0 then v[pos(',',v)]:='.';
     result:=v;
   end;

   function ch_date(v:string):string;
   begin
     if v='0:00:00' then result:='null'
     else result:=''''+v+'''';
   end;

begin

     with Q do
     begin
     LogSQL:=SQL.Text;
          for i := 0 to ParamCount-1 do
          begin
          nam:=':'+VarToStr(Params[i].name);
          val:=VarToStr(Params[i].Value);

          if val='' then val:='null' else
          case Params[I].DataType of
            ftString: val:=''''+val+'''';
            ftInteger: val:=val;
            ftFloat:  val:=ch_point(val);
            ftCurrency: val:=ch_point(val);
            ftDate: val:=ch_date(val);
            ftTime: val:=ch_date(val);
            ftDateTime:val:=ch_date(val);
            else
            val:=val;
          end;

          LogSQL := stringreplace(LogSQL, nam, val,[rfIgnoreCase]);
          end;
     end;
     result:=LogSQL;
end;
...
Рейтинг: 0 / 0
09.08.2019, 01:36
    #39847270
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текст запроса TSQLQuery с учетом подставленных параметров
"Она та самая" такое осилит ?
Код: pascal
1.
select ':param1' as AAA from Table where Id = :param1
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить текст запроса TSQLQuery с учетом подставленных параметров / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]