因此,我有一个应该调用的方法,它将数组构造函数作为参数,如下所示:
myTTable.InsertRecord([var1, var2, var3]);
问题是我设法将很多变量放入字符串params
的数组中。但我似乎无法通过它作为论点。
所有这些都不起作用:
myTTable.InsertRecord(params);
myTTable.InsertRecord([params]);
myTTable.InsertRecord(Slice(params, 88)); // I know I have 88 elements
我发现的唯一方法是写:
myTTable.InsertRecord([params[0], params[1], params[2], ... params[87]]);
我不想这样做。还有另一种方法吗?
此外,我使用的是Delphi的旧版本,由于某些公司原因,我无法升级。
答案 0 :(得分:2)
InsertRecord()
以Variant Open Array(array of const
)作为输入。正如您已经发现的那样,在Delphi中构造这种数组的 typical 方法是在每个单独的值周围使用方括号语法。
但是,array of const
实际上是array of TVarRec
,您可以手动进行构建(请谨慎!因为TVarRec
在如何传递某些类型(如字符串)方面有些麻烦在其中)。
例如:
procedure DoInsert(params: array of string);
var
v: array of TVarRec;
i: Integer;
begin
SetLength(v, Length(params));
for i := 0 to Length(params)-1 do
begin
{$IF CompilerVersion >= 20}
// Delphi 2009 and later...
v[i].VType := vtUnicodeString;
v[i].VUnicodeString := Pointer(params[i]);
{$ELSE}
// Delphi 2007 and earlier...
v[i].VType := vtAnsiString;
v[i].VAnsiString := Pointer(params[i]);
{$IFEND}
end;
myTTable.InsertRecord(v);
end;
var
params: array of String;
begin
SetLength(params, 88);
// populate params as needed...
DoInsert(params);
end;