- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有在 TVarRec 和 Variant 值之间进行转换的标准方法?
我想解析“常量数组”并使用这些值来填充 TMSQuery 中的参数。为此,我使用列名称列表(从 TMSQuery.KeyFields 生成),并将数组中的值与 KeyFields 中的列名称(按位置)进行匹配,然后使用列名称通过 ParamByName 设置相应的参数.
下面的代码是我想出的,但 VarRecToVariant 看起来不太优雅。有更好的解决办法吗?
keyFields: TStringList;
// List of table column names (keyFields.DelimitedText := query.KeyFields;)
// e.g. Name, Age
query: TMSQuery;
// Parametrized query with a parameter for each field in keyFields
// SELECT * FROM People WHERE Age=:Age AND Name=:Name
// If keyValues is ['Bob', 42] the resulting query should be
// SELECT * FROM People WHERE Age=42 AND Name='Bob'
procedure Read(keyValues: array of const);
var
i: Integer;
name: string;
value: Variant;
begin
...
for i := 0 to keyFields.Count - 1 do
begin
name := keyFields[i];
value := VarRecToVariant(keyValues[i]);
query.ParamByName(name).Value := value;
end;
query.Open
...
end;
function VarRecToVariant(varRec: TVarRec): Variant;
begin
case varRec.VType of
vtInteger: result := varRec.VInteger;
vtBoolean: result := varRec.VBoolean;
vtChar: result := varRec.VChar;
vtExtended: result := varRec.VExtended^;
vtString: result := varRec.VString^;
...
end;
end;
注释:
最佳答案
替换
procedure Read(keyValues: array of const);
与
procedure Read(keyValues: array of Variant);
那么您将不需要将 TVarRec 转换为 Variant。
关于delphi - 如何在 TVarRec 和 Variant 之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3733640/
我想使用具有多种类型的开放数组(例如:['string',12,123.21])。在我的搜索过程中,我发现了两种方法可以做到这一点。一种是使用 TVarRec 数组,另一种是使用 varArray。我
我想定义一个可以在 TClientDataSet SetRange 方法中进一步使用的 var 或 const: var lRangeStart : array of TVarRec; lRa
是否有在 TVarRec 和 Variant 值之间进行转换的标准方法? 我想解析“常量数组”并使用这些值来填充 TMSQuery 中的参数。为此,我使用列名称列表(从 TMSQuery.KeyFie
我知道 array of const被“翻译”为array of TVarRec由编译器所以我想知道是否有一种方法可以直接存储开放数组的副本(或者可能使用 const 的引用),我的意思是无需创建循环
我正在为存储库构建 SQL 查询生成器。此构建器将查找查询的所有必填字段并创建 SQL 文本。为此,我正在使用 Format() 过程。但是,我无法在运行时创建必须传递给 Format 过程的 TVa
我想将格式化参数 Args 传递到 Format功能。我找到了一些例子,但我找不到如何在 TVarRec 中分配字符串常量成员。以下代码编译失败,并显示 E2089 Invalid typecast。
我是一名优秀的程序员,十分优秀!