例如,有一个像ExecSQLEx这样的函数,你可以向它传递可变数量的参数:
if not DataModule1.UniConnection1.InTransaction then
DataModule1.UniConnection1.StartTransaction;
try
//тут выполняемый запрос
DataModule1.UniConnection1.ExecSQLEx('UPDATE ...','name_parametr1', parametr1, 'name_parametr2', parametr2,'name_parametr3', parametr3 ...);
DataModule1.UniConnection1.Commit;
except on E: Exception do
begin
DataModule1.UniConnection1.Rollback;
end;
end;
并且您可以创建一个函数来消除一堆样板代码(因此您不必每次都编写它)
class function myExecSQLEx (SQL:string; params: array of Variant): String;
...
function TForm1.myExecSQLEx (SQL:string; params: array of Variant): String;
begin
if not DataModule1.UniConnection1.InTransaction then
DataModule1.UniConnection1.StartTransaction;
try
DataModule1.UniConnection1.ExecSQLEx(SQL, params) //просто передаётся произвольное кол-во именованных параметров
DataModule1.UniConnection1.Commit;
Result:='ok';
except on E: Exception do
begin
DataModule1.UniConnection1.Rollback;
Result:='Ошибка: '+ E.Message;
end;
end;
end;
但这一切都适用于 ExecSQLEx 函数,并且由于我在 TUniQuery 组件中执行查询,因此只有预先指定的参数的精确枚举:
...
UniQuery1:TUniQuery;
...
UniQuery1.Params.ParamByName('name_parametr1').AsInteger := parametr1;
UniQuery1.Params.ParamByName('name_parametr2').AsInteger := parametr2;
...
UniQuery1.Open;
是否有可能以某种方式使 UniQuery 传递任意数量的命名参数?
如果您需要确切命名的参数,那么您可以尝试使用该类的实例
TParams,它似乎与TDataSet. 或发送列表TList<TPair<string, varinat>>但如果我们通过类比来做,那么我们只是受制于参数。我们监视未找到值的数量的对应关系,我们做一些事情(我们用默认值清除它)。
匹配数量的代码。
可以使用就绪请求在内部创建组件,也可以从外部传递请求文本。