gpt4 book ai didi

delphi - 如何从 Delphi 将 GUID 设置为 ADO 查询参数?

转载 作者:行者123 更新时间:2023-12-03 15:36:45 26 4
gpt4 key购买 nike

MS Access 允许数字类型 GUID(在德语中称为“Replikations-ID”,所以我猜在英语中这将是“replication id”),它作为 16 字节二进制字段存储在数据库中。

我找到了如何在 Delphi 中使用 TADOQuery 访问这些字段/TADOTable使用

(TheQuery.FieldByName('SomeGuidField') as TGUIDField).AsGuid;

但现在我想执行这样的 SQL 查询:

SELECT * FROM SomeTable WHERE SomeGuidField=:AGuid

我尝试设置 TADOQuery.SQL属性到上述语句,但没有找到实际设置 AGuid 参数以便可以打开查询的方法。无论我尝试什么都会导致 (ADO/COM) 错误

No value given for one or more required parameters

例如:

TheQuery.ParamByName('AGuid').Value := QuotedString(GuidToStr(AGuid));
TheQuery.Open; // <<== crashes here

这也不起作用:

TheQuery.ParamByName('AGuid').Value := GuidToStr(AGuid);
TheQuery.Open; // <<== crashes here

我查看了 TGuidField(...).AsGuid 的工作原理,发现它首先将 GUID 转换为字符串,然后将字符串转换为变体(反之亦然)。

如果我总是生成这样的 SQL 语句,它就可以正常工作:

SELECT * FROM SomeTable WHERE SomeGuidField='<a guid goes here>'

当我在程序中传递 TADOQuery 对象时,我只想更改 AGuid 参数,以使大多数方法与实际的 SQL 语句无关。

除了总是更改完整的 SQL 语句之外,还有其他方法可以设置 GUID 参数吗?

(它必须是 GUID,因为我需要一个全局唯一标识符来与基于 MS SQL 或 MS Access 的其他数据库同步。)

编辑vradmilovic 是对的,这有效:

TheQuery.ParamByName('AGuid').Value := GuidToStr(AGuid);
TheQuery.Open;

我不明白为什么我第一次尝试时没有成功。

最佳答案

这是使用 ADO 设置参数的正确方法。您收到的消息很可能是由于某些字段的拼写错误造成的(如果字段不存在,您会收到相同的消息)。

关于delphi - 如何从 Delphi 将 GUID 设置为 ADO 查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/295511/

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