ClientDataSet 的 执行 带参数 的Sql 语句报错 ( 积分: 5 )

  • 主题发起人 主题发起人 青云
  • 开始时间 开始时间

青云

Unregistered / Unconfirmed
GUEST, unregistred user!
环境:
版本:delphi7
数据库:MSSQL:
数据控制控件:ClientDataSet +DataSetProvider+AdoDataSet (Ado驱动)

执行下面的话:
procedure TfrmVend.Button1Click(Sender: TObject);
begin
inherited;
ClientDataSet1.Close;
ClientDataSet1.CommandText:='select * from Vend where VendNo=:VendNo';
ClientDataSet1.Params[0].DataType:=ftString;
ClientDataSet1.Open;
end;

结果报错:
'数据类型 varchar 和 text 在 equal to 运算符中不兼容。'


但是
如果使用
数据控制控件:ClientDataSet +DataSetProvider+SqlDataSet (dbExpress驱动)
就很正常;

不知道是什么原因,如何改正.
 
ClientDataSet1.Close;
ClientDataSet1.CommandText:='select * from Vend where VendNo=:VendNo';
ClientDataSet1.Params[0].DataType:=ftString;
ClientDataSet1.Open;
你没有赋参数值,
如果你赋了参数为空串也出错。
这个好像是ClientDataSet的一个BUG

你可以跟踪一下SQL语句。
你把参数定义为Text类型。
如果你不赋值就是NULL也不对,因为'select * from Vend where VendNo=NULL也不是对的SQL语句。所以你不能用参数的方式来写,你只能用构造SQL方法来写。
如果直接用ADOQuery是没问题的,可以正确执行。
 
后退
顶部