gpt4 book ai didi

delphi - 将 NULL 参数传递给 TFDConnection.ExecSQLScalar

转载 作者:行者123 更新时间:2023-12-01 23:32:55 25 4
gpt4 key购买 nike

是否可以将 NULL 值传递给此 FireDAC 查询的某些参数?:

conn: TFDConnection;
fPar1, fPar2, fPar3: OleVariant;

cnt := conn.ExecSQLScalar(
'SELECT COUNT(*) FROM my_table WHERE par1=:p1 AND par2=:p2 AND par3=:p3',
[fPar1, fPar2, fPar3]
);

是否可以在没有中间 TFDQuery 的情况下仅使用 TFDConnection 对象?

最佳答案

是的,您可以执行此操作,尽管 TFDConnection 使用参数ExecSQLScalar 无法从您的调用代码直接访问,但它可能不会产生您期望的结果,除非您修改 SQL - 见下文。

如果您事先将 fPar2 设置为 Null,那么您可能会收到类似“[FireDAC] 参数类型 [fPar2] 未知...”的错误消息。

您可以通过使用 ExecSQLScalar 的重写来避免这种情况,它允许您指定参数后面的开放数组中参数的字段类型其中列出了变体,例如

cnt := conn.ExecSQLScalar(
'SELECT COUNT(*) FROM my_table WHERE par1=:p1 AND par2=:p2 AND par3=:p3',
[fPar1, fPar2, fPar3],
[ftString, ftString, ftString] // or whatever
);

参见

function TFDCustomConnection.ExecSQLScalar(const ASQL: String;
const AParams: array of Variant; const ATypes: array of TFieldType): Variant;

在FireDAC.Comp.Client.Pas中

但是,根据我这里的数据,这不会产生正确的计数值(使用西雅图和 SS2014),大概是因为 Uwe Raabe 关于 par1 = Nullpar1 is Null< 的观点很好。/。为了获得正确的答案,我必须根据 Keith Miller 的评论修改 SQL,在 SELECT ...

之前包含 set ansi_nulls off

关于delphi - 将 NULL 参数传递给 TFDConnection.ExecSQLScalar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42692270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com