码迷,mamicode.com
首页 > 其他好文 > 详细

Unknown parameter datatype UNKNOW send from server.

时间:2018-12-22 01:18:52      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:跟踪   type   insert   两种方法   ons   color   class   应用服务   ram   

技术分享图片

procedure Tmainform.Button7Click(Sender: TObject);
begin

  kbmMWClientQuery3.Query.Text:=insert into t1 (fid,fname,fint,fint64) values (:id,:name,:int,:int64);

  //kbmMWClientQuery3.Params.ParamByName(‘id‘).DataType:=ftString;
  //kbmMWClientQuery3.ParamByName[‘id‘].DataType:=ftString;
  //kbmMWClientQuery3.ParamByName[‘id‘].Size:=200;

  kbmMWClientQuery3.ParamByName[id].Value:=2000;
  kbmMWClientQuery3.ParamByName[name].Value:=2000;
  kbmMWClientQuery3.ParamByName[int].Value:=1;
  //kbmMWClientQuery3.ParamByName[‘int64‘].Value:=11111111;
  kbmmwclientQuery3.Execute;

end;

看上面的代码,利用ClientQuery执行一条Insert语句,向数据库插入一条记录。如果不为int64参数赋值,则在执行Execute时,产生异常:Unknown parameter datatype (UNKNOW) send from server,同时,记录也插入到数据库中了。如果换用Resolve提交数据,则不会产生异常。

通过跟踪分析Execute方法,原来,正如这个异常信息所示,就是执行SQL时,从应用服务器返回了UNKNOW参数类型,即未知参数类型,而在客户端的PerformExecute方法中,当向服务端发出请求并接收返回结果后,客户端要根据服务端返回的结果,重建客户端ClientQuery的参数及值,当发现有UNKONW参数时,会提出这个异常。

为避免这种情况,有两种方法:一是换用Resolve可以解决;二是保证为所有的参数赋值。

我试着注释掉PerformExecute中下面两行代码:

             if ftype=ftUnknown then
                kbmMWRaiseException(KBMMW_ERR_CLIENT_DATASTORE_RESPONSE_UNKNOWNPARAMDATATYPE,Unknown parameter datatype+fstype+) send from server.);

不再提升异常,也能重建ClientQuery的参数及其值。

 

 

 

 

 

技术分享图片

Unknown parameter datatype UNKNOW send from server.

标签:跟踪   type   insert   两种方法   ons   color   class   应用服务   ram   

原文地址:https://www.cnblogs.com/kinglandsoft/p/10115385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!