[转载红鱼儿]kbmmw 开发点滴:kbmMWQuery插入记录

简介: 想利用TkbmMWUNIDACQuery插入一条记录,结果遇到问题,显示: 不允许从数据类型 sql_variant 到 varchar 的隐式转换。请使用 CONVERT 函数来运行此查询。这是什么问题啊?下面是出问题的代码,很常规的写法。

想利用TkbmMWUNIDACQuery插入一条记录,结果遇到问题,显示:

不允许从数据类型 sql_variant 到 varchar 的隐式转换。请使用 CONVERT 函数来运行此查询。
这是什么问题啊?下面是出问题的代码,很常规的写法。

    q:= TkbmMWUNIDACQuery.Create(self);
    try
      q.ConnectionPool:=self.kbmMWUNIDACConnectionPool1;
      q.SessionName:=Self.kbmMWPooledSession1.SessionName;
      q.SQL.Text:= 'Insert into t (MaxSn) values (:MaxSn)';
      q.Params.ParamByName('Maxsn').AsString:='222';
      q.ExecSQL;//出错: 不允许从数据类型 sql_variant 到 varchar 的隐式转换。请使用 CONVERT 函数来运行此查询。
    finally
      q.Free;
    end;

最后发现,问题出在uniDAC上:
在这个方法中,procedure TkbmMWCustomUNIDACQuery.PerformExecute;是使用TuniSQL执行的SQL,在执行前,调用了uniSQL.Prepare方法,注释掉,就没有问题了。

uniDAC怎么会这样呢?

通过这个错误,到是让我仔细读了TkbmUNIDACQuery的ExecSQL方法的实现过程,说出来很简单:
为kbmUNIDACQuery做好sql语句及设置好参数后,在调用ExecSQL时,kbmUNIDACQuery在重载的方法PerformExecute中实现数据库操作。

看下这个方法,就是用一个TuniSQL对象,并把自己的SQL语句及参数传递给他,由他来执行具体的数据库操作。
 

       q:=TUniSQL.Create(nil);//建立uniSQL对象
        try
           SetSpecificOptions(q.SpecificOptions);//设置附加的参数
           q.Connection := c.Database;//使用kbmUNIDACQuery的数据库联接,即uniConnection
           q.SQL.Assign(CookedQuery);//设置执行的SQL
           //q.Prepare; //Prepare语句,就是这句闹病!需要注释掉
           UniDACCopyInputParamsValueAndType(Params,q.Params,
             Connection.ConnectionPool.MetaData.UnicodeOptions);//设置参数,把uniDACQuery的参数,传递给内部执行数据库操作Q对象的参数
           q.Execute;
目录
相关文章
|
Java
kbmmw 的HTTPSmartService中的跨域访问
有同学在使用kbmmw 与extjs 结合的时候,涉及到了跨域访问,这个在 kbmmw 里面已经完全解决。 extjs 在访问跨域的时候,首先会使用OPIONS  调用,服务端要根据浏览器请求的 head 来回应客户端,如果正确,则客户端再调用GET 方式访问服务器。
1559 0
使用kbmmw smart service 属性时的一个注意事项
kbmmw 5.0 以后支持smart service, 这个用起来非常方便,kbmmw 通过 定制属性来简化编程,可以参考我以前的文章。但是这个意味着使用单元引用一定要小心, 否则出了问题,都不知道怎么回事?浪费大量的时间。
1419 0
|
数据库 网络架构
kbmmw 的HTTPSmartService入门
前面介绍过kbmmw 中的smartservice. 这个既可以用于kbmmw 的客户端,也可以使用http 访问。 在新版的kbmmw里面,作者加强了http 的支持,我们可以只使用HTTPSmartService ,这样可以省去很多代码,可以更方便、简单的实现REST 服务。
1875 0
|
JavaScript 关系型数据库 MySQL
kbmmw 与extjs 的初次结合
前面写了extjs 的安装,今天写一下kbmmw 与extjs 的结合,参照delphi 产品经理marco文章 。 由于extjs 设计时要读取服务器端的数据,所以先要做一个rest 服务器。 先要用kbmmw 建一个web 服务器,可以参照我以前写的例子。
1325 0
|
SQL JSON JavaScript
kbmmw 中JSON 中使用SQL 查询
前面讲到了kbmmw 的JSON 对象操作,如何快速的查找JSON 中的值? 一种办法就是通过遍历的方法,其实在kbmmw 还有一种灵活的查询方式, 就是通过SQL 方式查询JSON 中的值。也就是说用TKbmmwmemSQL 控件来实现。
1244 0
|
Web App开发 网络协议 数据库
KbmMW 服务器架构简介
kbmmw 由于文档比较少,很多同学开始用时很难理解。一直准备写一个关于kbmmw 架构的东西。 这几天与红鱼儿(blog)   研究服务器线程时,整理了一下,大概画了一下kbmmw (版本4.5)服务器的架构图,这里未涉及消息传输。
1225 0
|
SQL
unidac 访问sql server 字符查询参数失效问题及解决办法
在帮朋友调试kbmmw 服务器的时候,发现用uindac 访问sql server作为后台时,碰见一个问题。 具体如下: cx.Close; cx.sql.add('select * from T where id=:id'); // 这里id 是整数字段 cx.Prepare; cx.ParamByName('id').AsString:='1475'; cx.Open; 这一句运行时不出现错误,但是返回结果为空,很是奇怪。
1047 0
|
Web App开发 数据库 开发工具
推荐一款pascal 语言的web 开发工具
这几天仔细研究了一款使用Pascal 语言开发web 的工具 具体介绍可以参照这里。 先上几张他开发的页面照。 这是他的开发页面 经过几天的摸索,基本上了解了他的工作原理: 1.使用类似delphi界面编辑器,绘出所见即所得的页面。
1379 0
|
JSON 数据格式 数据库
[转载红鱼儿]kbmmw 开发点滴:kbmMW:Unknown property:indexes
利用kbmMW的QueryServices,对数据集进行提交,当改用JSON格式时,客户端提交时,会产生这个错误,明明已经更新数据库,也产生这个错误!如果换成Bin格式,则正常。 能过查看kbmMWJSONStreamFormat单元,问题产生在这行代码:nIndexDefs:=nDefs.AsArray['indexes']; 可以这样理解: 客户端提交数据后,服务器会返回一个错误结果数据集,不管有无错误,都要返回这个结果集。
969 0
[转载红鱼儿]kbmmw 开发点滴:kbmWTCPIPInfyClientTransport联接状态
kbmWTCPIPInfyClientTransport联接状态 当客户端请求一个Service时,kbmWTCPIPInfyClientTransport.Active是什么样呢?做一个简单的测试,原来是这样:当 kbmMWSimpleClient1.Request时,会检查使用的Transport是否Active,如果没有打开,则Active=True. 调用后,Transport.Active自动为True!当检查到已经为Active,则直接发出请求Request。
859 0