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

Натолкнулся на какой-то (по моим скромным меркам) глюк:
Собираю команду для FDCommand:
Код: pascal
1.
2.
3.
4.
5.
    with DM.FDCommand do
... SI := 'STATEINT=:STATEINT, ';
... CommandText.Text := 'update TPDPUBLNOTES set '+SI+'IDAUTH=:IDAUTH, LASTEDITDATE=current_timestamp, IDOPERATION=null where ID=:ID';
... ParamByName('ID').AsInteger := FDQPubl.FieldByName('ID').AsInteger;
    ParamByName('STATEINT').AsInteger := AStateInt; //тут вываливается с ошибкой параметр STATEINT не найден


а так выполняется, но не подходит по задаче:
Код: pascal
1.
CommandText.Text := 'update TPDPUBLNOTES set STATEINT=:STATEINT, IDAUTH=:IDAUTH, 



Когда то читал, и использовал для FIB'ов, как-то отключал анализ текста, а по окончании формирования SQL что-то включал и параметры создавались (то есть не создавались при каждом SQL.Add('...'), а в конце подготовки). Не могу найти для FireDac такое. Подскажите?

весь текст процедуры
Код: 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.
procedure TMDIExpertise.SetPublStateTo(const AStateInt, AStateLK: Integer; const ASetDate: Boolean); //-10 - не заполняем
var SI,SL,SD: String;
begin
    with DM.FDCommand do
    try
      if not Transaction.Active then Transaction.StartTransaction;
      SI := ''; if AStateInt > -10 then SI := 'STATEINT=:STATEINT, ';
      SL := ''; if AStateLK > -10 then SI := 'STATELK=:STATELK, ';
      SD := ''; if ASetDate then SD := 'DOCDATE=current_date, ';

      if SI+SL+SD='' then Exit;
      CommandText.Text := 'update TPDPUBLNOTES set '+SI+SL+SD+'IDAUTH=:IDAUTH, LASTEDITDATE=current_timestamp, IDOPERATION=null where ID=:ID'; //тут все верно, CommandText.Text содержит STATEINT=:STATEINT

      ParamByName('ID').AsInteger := FDQPubl.FieldByName('ID').AsInteger;
      ParamByName('IDAUTH').AsInteger := GlobalUserID;
      if AStateInt > -10 then ParamByName('STATEINT').AsInteger := AStateInt; //тут вываливается с ошибкой параметр STATEINT не найден
      if AStateLK > -10 then ParamByName('STATELK').AsInteger := AStateLK;
      Execute();

      if Transaction.Active then Transaction.Commit;
    except
      on e:Exception do
      begin
        if Transaction.Active then Transaction.Rollback;
        MyMessageDlg('Произошла критическая ошибка'#13#10+
          'TMDIExpertise.acPublDeleteExecute'#13#10+E.Message, mtWarning, [mbok], 0);
      end;
    end;
  FDQPubl.RefreshRecord();
end;

...
Рейтинг: 0 / 0
FireDac в какой момент FDCommand генерирует параметры?
    #39739719
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio,

правильно ругается. В тексте запроса
Devillio
Код: pascal
1.
2.
3.
4.
5.
    with DM.FDCommand do
... SI := 'STATEINT=:STATEINT, ';
... CommandText.Text := 'update TPDPUBLNOTES set '+SI+'IDAUTH=:IDAUTH, LASTEDITDATE=current_timestamp, IDOPERATION=null where ID=:ID';
... ParamByName('ID').AsInteger := FDQPubl.FieldByName('ID').AsInteger;
    ParamByName('STATEINT').AsInteger := AStateInt; //тут вываливается с ошибкой параметр STATEINT не найден


нет параметра STATEINT. Есть ID, есть IDAUTH.
...
Рейтинг: 0 / 0
FireDac в какой момент FDCommand генерирует параметры?
    #39739721
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Devillio,
оспаде, я лошара.. столько времени потратил (( SI SL...
а можно вопрос удалить? )))
прошу прощения за потраченное время!
...
Рейтинг: 0 / 0
FireDac в какой момент FDCommand генерирует параметры?
    #39739722
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio,

сорри, проглядел..
...
Рейтинг: 0 / 0
FireDac в какой момент FDCommand генерирует параметры?
    #39740008
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio
Код: pascal
1.
2.
 SI := ''; if AStateInt > -10 then SI := 'STATEINT=:STATEINT, ';
 SL := ''; if AStateLK > -10 then SI := 'STATELK=:STATELK, ';


Devillio
Код: pascal
1.
//тут все верно, CommandText.Text содержит STATEINT=:STATEINT

А не нужно угадывать. Нужно просто сделать
Код: pascal
1.
ShowMessage(CommandText.Text)

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


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