将长 Unicode 字符串传递给 FireDac TADQuery 参数

vic*_*ico 5 delphi anydac firedac

我使用 AsWideString 将 Unicode 字符串传递给 TADQuery 参数。

ADQuery.Params.ParamByName('MyFld').AsWideString
Run Code Online (Sandbox Code Playgroud)

但是当字符串变得太长时,我收到错误:

[MyFld]. Max len = [8002], actual len = [10522]
Run Code Online (Sandbox Code Playgroud)

然后我决定使用 AsMemo 属性

ADQuery.Params.ParamByName('MyFld').AsMemo
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我的 Unicode 字符串无法正确显示。

解决这两个问题的方法是什么?

Jas*_*ell 5

TFDParam 类型在 XE5 中有一个 .AsWideMemo,它应该正确接受 unicode 字符并绕过您遇到的大小限制。

ADQuery.Params.ParamByName('MyFld').AsWideMemo := 'Some unicode string';
Run Code Online (Sandbox Code Playgroud)


Rem*_*eau 4

实际的数据库字段具有分配给它的最大字符限制。您不能设置超过该限制的值。它会截断该值,或者在您的情况下引发错误。您不能用于AsMemo设置非备注字段。继续使用AsWideString并注意您的数据库布局。