@Merlin_ML

Как задать переменное количество аргументов для чужой функции?

Помогите пожалуйста, имеется куча шаблонного кода когда выполняешь ExecSQLEx, например:

if not DataModule1.UniConnection1.InTransaction then 
DataModule1.UniConnection1.StartTransaction;          
try          
  //тут выполняемый запрос
  DataModule1.UniConnection1.ExecSQLEx('UPDATE ...','parametr1', parametr1, 'parametr2', parametr2,'parametr3', parametr3 ...);
  DataModule1.UniConnection1.Commit;  
except on E: Exception do
  begin
    DataModule1.UniConnection1.Rollback;
  end;
end;


Я хотел бы вынести это в отдельную функцию, где нужно лишь указать SQL текст запроса и параметры, но никак не могу сообразить как это правильно сделать. Проблема в том, что входящих параметров может быть разное количество, а их типы могут быть разные. Моё примерно преставление как это должно выглядеть:

...
class function upd<T> (SQL:string; params: array of T): T; static;
...
 function TForm1.upd<T> (SQL:string; params: array of T): T;
 begin
  if not DataModule1.UniConnection1.InTransaction then
  DataModule1.UniConnection1.StartTransaction;
  try

    DataModule1.UniConnection1.ExecSQLEx(SQL, params[i]) //как здесь перечислить в цикле и указать входящие аргументы?
    DataModule1.UniConnection1.Commit;
  except on E: Exception do
    begin
      DataModule1.UniConnection1.Rollback;
      ShowMessage('Ошибка: '+ E.Message)
    end;
  end;
 end;

Как правильно это сделать?
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 1
@StockholmSyndrome
наверное, как-то так:
class function upd<T>(SQL: string; params: array of Variant): Variant; static;
...
function TForm1.upd<T>(SQL: string; params: array of Variant): Variant;
begin
  ...
  DataModule1.UniConnection1.ExecSQLEx(SQL, params); 
  DataModule1.UniConnection1.Commit;
  ...
end;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы