Delphi:如何将Format()与TVarRec的运行时构建的数组一起使用?
我正在为存储库构建SQL查询生成器。此生成器将查找查询所需的所有字段并创建SQL文本。为此,我使用Format()过程。但是,我在运行时创建TVarRec数组时遇到了问题,我必须将其传递给格式化过程 使用诸如格式('%s,%s',['AString','AnotherString']);`。但我们必须如何在运行时创建它呢 以下是我的方法的简化版本:Delphi:如何将Format()与TVarRec的运行时构建的数组一起使用?,delphi,pointers,string-formatting,Delphi,Pointers,String Formatting,我正在为存储库构建SQL查询生成器。此生成器将查找查询所需的所有字段并创建SQL文本。为此,我使用Format()过程。但是,我在运行时创建TVarRec数组时遇到了问题,我必须将其传递给格式化过程 使用诸如格式('%s,%s',['AString','AnotherString']);`。但我们必须如何在运行时创建它呢 以下是我的方法的简化版本: procedure BuildString; begin FStrings := TStringList.Create; FSt
procedure BuildString;
begin
FStrings := TStringList.Create;
FStrings.Add('String 1');
FStrings.Add('String 2');
FStrings.Add('String 3');
FFormatString := '%0:s, %1:s, %2:s';
SetLength(FFormatStringParams, FStrings.Count);
for I := 0 to FStrings.Count - 1 do
begin
aString := FStrings.Strings[I];
FFormatStringParams[I].VString := Addr(aString);
end;
ShowMessage(Format(FFormatString, FFormatStringParams));
end;
但是,当我运行此命令时,会出现错误“格式“%0:s,%1:s,%2:s”无效或与参数不兼容”
我知道我错误地构建了必须传递到格式化过程的TVarRec数组。有人能帮我吗
谢谢。您传递的是字符串变量的地址,而不是它的值。此外,您分配的是
VString
字段,该字段需要短字符串
。您提供的是本机字符串
替换
VString := Addr(aString)
与
此外,您需要通过分配VType
字段来指定字符串类型
for I := 0 to FStrings.Count - 1 do
begin
aString := FStrings.Strings[I];
FFormatStringParams[I].VType := vtUnicodeString;
FFormatStringParams[I].VUnicodeString := Pointer(aString);
end;
非常感谢。成功了!FWIW,@Ludo,如果你真的想操纵
TVarRec
s,请阅读我的文章。它还显示了帮助你实现这一点的代码。
for I := 0 to FStrings.Count - 1 do
begin
aString := FStrings.Strings[I];
FFormatStringParams[I].VType := vtUnicodeString;
FFormatStringParams[I].VUnicodeString := Pointer(aString);
end;