powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / [FireDac] TFDConnection.ExecSQL без подготовки запроса
4 сообщений из 4, страница 1 из 1
[FireDac] TFDConnection.ExecSQL без подготовки запроса
    #39495538
SolidSnake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!

При исполнении запроса к postgresql через FDConnection.ExecSQL
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE test (
  fields jsonb NOT NULL
  CONSTRAINT validate CHECK (
   (fields->'tst')::jsonb ?& array['col','ref']
  )
);


вываливается ошибка:
автор[FireDAC][Phys][PG]-335. Parameter [] data type is unknown. Hint: specify TFDParam.DataType or assign TFDParam value before Prepare/Execute call
Как заставить TFDConnection выполнить рабочий запрос "как есть" без анализа на наличие параметров?

Пробовал:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with FDConnection do 
begin
  ResourceOptions.DirectExecute := True;
  ResourceOptions.PreprocessCmdText := False;
  ResourceOptions.EscapeExpand := False;
  ResourceOptions.MacroCreate := False;
  ResourceOptions.MacroExpand := False;
  ResourceOptions.ParamCreate := False;
  ResourceOptions.ParamExpand := False;
end;


Использование других объектов fd не подходит..
...
Рейтинг: 0 / 0
[FireDac] TFDConnection.ExecSQL без подготовки запроса
    #39495606
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте (fields->'tst') :::: jsonb ?& array['col','ref']
...
Рейтинг: 0 / 0
[FireDac] TFDConnection.ExecSQL без подготовки запроса
    #39495790
SolidSnake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже самое :(

Странно, через FDScript (и скорее всего через другие объекты) удается заставить исполняться запрос как есть, и для этого хватает
FDConnection.ResourceOptions.PreprocessCmdText := False; Почему же FDConnection.ExecSQL игнорит настройку, ошибка?
...
Рейтинг: 0 / 0
[FireDac] TFDConnection.ExecSQL без подготовки запроса
    #39496239
SolidSnake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, без глубоких знаний архитектуры, исследование проблемы может убить много времени.
А относительно безопасный костыль выглядит следующим образом: FireDAC.Comp.Client.pas
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function TFDCustomConnection.ExecSQL(const ASQL: String; const AParams: array of Variant;
  const ATypes: array of TFieldType): LongInt;
var
  oCmd: IFDPhysCommand;
begin
  oCmd := BaseCreateSQL;
  try
    // Костыль, чтобы ExecSQL учитывал PreprocessCmdText из настроек соединения
    oCmd.Options.ResourceOptions.PreprocessCmdText := ResourceOptions.PreprocessCmdText;
    ...


Если кто-то найдет решение лучше, будет здорово :)
Углубление в алгоритм показывает, что там активно переиспользуется код, так что нужно соблюдать осторожность.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / [FireDac] TFDConnection.ExecSQL без подготовки запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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