我已经下载并安装了MySQL Connector 5.1 x64,所以我可以使用MySQL和Delphi.我可以与ODBC建立连接,并从我的Delphi环境和MySQL Workbench进行连接.
但是,当我在运行时构建我的查询时,我得到一个错误说:
项目AAA.exe引发异常类EOleException,消息"参数类型错误,超出可接受的范围,或者彼此冲突".流程停止了.使用"步骤"或"运行"继续.
我的代码:
qDates := TADOQuery.Create(Component);
qDates.Connection := FConnection;
qDates.SQL.Text :=
'select ' +
' * ' +
'from ' +
' resulttable ' +
'where ' +
' oid = :oid ' +
' and datedial >= :datebegin and datedial <= :dateend'; // <<-- Exception here
Run Code Online (Sandbox Code Playgroud)
详细信息:
在我有机会配置参数之前,异常发生在文本分配上.
如果我注释掉这个where条款,那么任务就可以了.
这与使用参数和ADO查询(mysql/MyConnector)类似,但区别在于我一次分配整个文本,并且在有机会配置参数之前我得到了异常.
令人费解的部分 - 完全相同的代码在我的其他机器上工作正常,但我无法弄清楚有什么不同.
因此问题 - 什么可能导致Delphi代码和MySQL服务器之外的上述异常?
这似乎是MySQL ODBC提供程序的一个怪癖.
如果在设置SQL文本后分配连接,那么它将起作用.原因可以在这里找到.
qDates := TADOQuery.Create(Component);
// do net yet assign TADOConnection to prevent roundtrip to ODBC provider
qDates.SQL.Text :=
'select ' +
' * ' +
'from ' +
' resulttable ' +
'where ' +
' oid = :oid ' +
' and datedial >= :datebegin and datedial <= :dateend';
qDates.Connection := FConnection;
Run Code Online (Sandbox Code Playgroud)
UPDATE
此QC条目解释了此问题的确切原因.
简而言之,ADODB单元从RefreshFromOleDB程序补丁这一行:
Parameter.Attributes := dwFlags and $FFFFFFF0; { Mask out Input/Output flags }
Run Code Online (Sandbox Code Playgroud)
至:
if dwFlags and $FFFFFFF0 <= adParamSigned + adParamNullable + adParamLong then
Parameter.Attributes := dwFlags and $FFFFFFF0; { Mask out Input/Output flags }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |