Перейти к содержанию
Fire Monkey от А до Я
  • 0

Выполнен захват SQL.


Alisson R Oliveira

Вопрос

Привет всем, мне нужно создать запись журнала для этого. Мне нужно захватить sql, выполняемый FDQuery, но я не могу получить текст с параметрами, помещенными в предложение sql.
мой код:

 

function TModelArea_executante.Inserir: Boolean;
var
  Qry: TFDQuery;
begin
  Qry := TFDQuery.Create(nil);
  try
    Qry.Active := False;
    Qry.Connection := dmConexao.conDados;
    Qry.SQL.Clear;
    Qry.SQL.Add('INSERT INTO area_executante ');
    Qry.SQL.Add('(area_executante, descricao) ');
    Qry.SQL.Add('VALUES');
    Qry.SQL.Add('(:area_executante, :descricao) ');
   //CodigoGerado := GeraCodigo;
    Qry.ParamByName('area_executante').AsString := Area_executante;
    Qry.ParamByName('descricao').AsString := Descricao;
    try
      Qry.ExecSQL;

      Result := True;
      IncrementarCodigo;
    except
      on E: Exception do
      begin
        Result := False;
        TCrux.Log('Erro ao tentar salvar Area_executante - ', E.Message);
      end;
    end;
  finally
    Qry.DisposeOf;
  end;
end;

 

если кто-нибудь знает, как я могу получить sql с параметрами, замененными на sql, я ценю помощь.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Не знаю правильно понял или нет то что хотел спросить, так как переведено ужасно ) Я обычно когда пользуюсь переводчиком перевожу сначала на английский, потом полученный перевод назад на русский, если ничего не понятно то переделываю так чтобы после перевода на русский было понятнее. Ну да ладно. 

Если нужен sql запрос с параметрами то надо организовать цикл по параметрам, и сохранять данные в строку. 

            for i := 0 to qpg.FieldCount - 1 do
            begin
              paramstring:= paramstring + ' name: ' + qpg.Fields[i].FieldName;
              case qpg.Fields[i].DataType of
                ftInteger:
                  begin
                    paramstring:= paramstring + ' val int: ' + InTToStr(qpg.FieldByName(qpg.Fields[i].FieldName).AsInteger);
                  end;
                ftFloat:
                  begin
                    paramstring:= paramstring + ' val flt: ' + FloatToStr(qpg.FieldByName(qpg.Fields[i].FieldName).AsFloat);
                  end;
                ftCurrency:
                  begin
                    paramstring:= paramstring + ' val cur: ' + FloatToStr(qpg.FieldByName(qpg.Fields[i].FieldName).AsCurrency);
                  end;

                ftSmallint:
                  begin
                    paramstring:= paramstring + ' val smallint: ' + IntToStr(qpg.FieldByName(qpg.Fields[i].FieldName).AsInteger);
                  end;
                ftGuid:
                  begin
                    paramstring:= paramstring + ' val guid: ' + qms.ParamByName(qpg.Fields[i].FieldName).AsString;
                  end;
                ftString, ftMemo, ftWideMemo, ftWideString:
                  begin
                    paramstring:= paramstring + ' val str: ' + qms.ParamByName(qpg.Fields[i].FieldName).AsString;
                  end;
                ftDate:
                  begin
                    paramstring:= paramstring + ' val date: ' + DatetoStr(DateOf(qpg.FieldByName(qpg.Fields[i].FieldName).AsDateTime));
                  end;
                ftDateTime:
                  begin
                    paramstring:= paramstring + ' val datetime: ' + DateTimeToStr(qpg.FieldByName(qpg.Fields[i].FieldName).AsDateTime);
                  end;
                ftTime:
                  begin
                    paramstring:= paramstring + ' val time: ' + TimeToStr(TimeOF(qpg.FieldByName(qpg.Fields[i].FieldName).AsDateTime));
                  end;
                ftTimeStamp:
                  begin
                    paramstring:= paramstring + ' val timestamp: ' + DateTimeToStr(qms.ParamByName(qpg.Fields[i].FieldName).AsDateTime);
                  end;
              end;
            end;
 

может есть более красивое решение, не знаю. 

Ссылка на комментарий
  • 0
В 10/12/2021 в 02:38, haword сказал:

Não sei se entendi bem ou não o que queria perguntar, pois está mal traduzido) Quando uso um tradutor, geralmente traduzo primeiro para o inglês, depois a tradução resultante de volta para o russo, se nada estiver claro, eu refaço para que depois da tradução para o russo fique mais claro. De qualquer forma. 

Se você precisar de uma consulta sql com parâmetros, precisará organizar um loop pelos parâmetros e salvar os dados em uma string. 

            para i: = 0 para qpg.FieldCount - 1
            comece
              paramstring: = paramstring + 'nome:' + qpg.Fields [i] .FieldName;
              case qpg.Fields [i] .DataType de
                ftInteger:
                  begin
                    paramstring: = paramstring + 'val int:' + InTToStr (qpg.FieldByName (qpg.Fields [i] .FieldName) .AsInteger);
                  fim;
                ftFloat:
                  begin
                    paramstring: = paramstring + 'val flt:' + FloatToStr (qpg.FieldByName (qpg.Fields [i] .FieldName) .AsFloat);
                  fim;
                ftCurrency:
                  begin
                    paramstring: = paramstring + 'val cur:' + FloatToStr (qpg.FieldByName (qpg.Fields [i] .FieldName) .AsCurrency);
                  fim;

                ftSmallint:
                  begin
                    paramstring: = paramstring + 'val smallint:' + IntToStr (qpg.FieldByName (qpg.Fields [i] .FieldName) .AsInteger);
                  fim;
                ftGuid:
                  begin
                    paramstring: = paramstring + 'val guid:' + qms.ParamByName (qpg.Fields [i] .FieldName) .AsString;
                  fim;
                ftString, ftMemo, ftWideMemo, ftWideString:
                  begin
                    paramstring: = paramstring + 'val str:' + qms.ParamByName (qpg.Fields [i] .FieldName) .AsString;
                  fim;
                ftDate:
                  begin
                    paramstring: = paramstring + 'val date:' + DatetoStr (DateOf (qpg.FieldByName (qpg.Fields [i] .FieldName) .AsDateTime));
                  fim;
                ftDateTime:
                  begin
                    paramstring: = paramstring + 'val datetime:' + DateTimeToStr (qpg.FieldByName (qpg.Fields [i] .FieldName) .AsDateTime);
                  fim;
                ftTime:
                  begin
                    paramstring: = paramstring + 'val time:' + TimeToStr (TimeOF (qpg.FieldByName (qpg.Fields [i] .FieldName) .AsDateTime));
                  fim;
                ftTimeStamp:
                  começar
                    paramstring: = paramstring + 'val timestamp:' + DateTimeToStr (qms.ParamByName (qpg.Fields [i] .FieldName) .AsDateTime);
                  fim;
              fim;
            fim;
 

talvez haja uma solução mais bonita, não sei. 

Good afternoon, sorry for the translation.

so actually i would like to capture the sql script executed in the database.

I have several queries that have insert, delete and update instructions that are parameters. These parameters are fed and executed and I need to generate a log to save these script with the values instead of the parameters.
I hope I explained better. Thanks

 

Добрый день, извините за перевод.

поэтому на самом деле я хотел бы захватить sql-скрипт, выполняемый в базе данных.

У меня есть несколько запросов с инструкциями по вставке, удалению и обновлению, которые являются параметрами. Эти параметры загружаются и выполняются, и мне нужно создать журнал, чтобы сохранить этот сценарий со значениями вместо параметров.
Надеюсь, я лучше объяснил. Спасибо

Ссылка на комментарий
  • 0
3 часа назад, Alisson R Oliveira сказал:

Good afternoon, sorry for the translation.

so actually i would like to capture the sql script executed in the database.

I have several queries that have insert, delete and update instructions that are parameters. These parameters are fed and executed and I need to generate a log to save these script with the values instead of the parameters.
I hope I explained better. Thanks

 

Добрый день, извините за перевод.

поэтому на самом деле я хотел бы захватить sql-скрипт, выполняемый в базе данных.

У меня есть несколько запросов с инструкциями по вставке, удалению и обновлению, которые являются параметрами. Эти параметры загружаются и выполняются, и мне нужно создать журнал, чтобы сохранить этот сценарий со значениями вместо параметров.
Надеюсь, я лучше объяснил. Спасибо

Добрый день.

Чем не понравилось мое решение? Надо просто пробежаться по всем параметрам TFDQuery и в зависимости от типа поля получить значение и сохранить его или поместить в сам запрос. Но помещая его в сам запрос нужно будет конвертировать вручную по типу, особенно даты. 

Why didn't you like my answer? You just need to loop through all TFDQuery parameters in a loop and, depending on the type of the field, get the value, save it, or put it into the query itself. But placing it in the query itself will need to be converted manually by type, especially the date.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...