我为MS SQL Server打开TFDConnection
参数:
DriverID=MSSQL
Password=test
User_Name=test
Server=VS2003-2008
Database=test
Single Connection=TRUE
Max Cursors=256
USE OLEDB=TRUE
然后我创建一个TFDQuery
(运行时),设置它与上面的连接,用参数化的INSERT查询填充它:
insert into TT_ACT (TT_ACT_ID,TT_PARENT_ID,TT_FROMDATE,TT_TODATE,TT_NAME,TT_NR,TT_CODE,TT_GROUP...)
values (:TT_ACT_ID,:TT_PARENT_ID,:TT_FROMDATE,:TT_TODATE,:TT_NAME,:TT_NR,:TT_CODE,:TT_GROUP,...)
然后我调用Prepare查询并获取:
[FireDAC][Phys][MSSQL]-335 Parameter [TT_ACT_ID] data type is unknown.
Hint: Specify TFDParam.DataType or Assign TFDParam.Value before Prepare/Execute call
如果我对FireBird数据库执行相同操作,则没有问题
我想这与使用OLEDB有关。机器上没有本机MS SQL客户端
FDPhysMSSQLDriverLink
所在的数据模块上没有TFDConnection
,但添加一个没有区别。
表TT_ACT存在。
我忘记了这项工作是什么?
答案 0 :(得分:1)
我会在这里关注帮助,避免在定义参数之前调用Prepare(它们的数据类型已完全指定)。除了帮助中的这个说明,你没有错过任何内容:
建议在准备电话之前设置参数。
对于常见的ODBC驱动程序(您仍然在讨论ODBC驱动程序,无论它们是否在内部使用OLE DB与DBMS通信),FireDAC都不会为准备好的命令确定参数数据类型。相反,它在目标DBMS上准备命令语句,并尝试绑定Params集合中的现有命令。这就是Prepare方法的实施方式(东京)。
ODBC API提供SQLDescribeParam函数来获取准备好的命令的参数详细信息,但FireDAC不会在任何地方(此时)使用它。相反,它会手动离开构建参数集合。这没有错,因为最终,开发人员需要知道要分配给某个命令参数的值,以便知道这个值类型。
答案 1 :(得分:0)