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

Натолкнулся на какой-то (по моим скромным меркам) глюк:
Собираю команду для 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
28.11.2018, 13:20
    #39739719
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDac в какой момент FDCommand генерирует параметры?
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
28.11.2018, 13:20
    #39739721
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDac в какой момент FDCommand генерирует параметры?
Devillio,
оспаде, я лошара.. столько времени потратил (( SI SL...
а можно вопрос удалить? )))
прошу прощения за потраченное время!
...
Рейтинг: 0 / 0
28.11.2018, 13:21
    #39739722
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDac в какой момент FDCommand генерирует параметры?
Devillio,

сорри, проглядел..
...
Рейтинг: 0 / 0
28.11.2018, 18:06
    #39740008
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FireDac в какой момент FDCommand генерирует параметры?
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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDac в какой момент FDCommand генерирует параметры? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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