unidac 访问sql server 字符查询参数失效问题及解决办法-阿里云开发者社区

开发者社区> 数据库> 正文

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; 这一句运行时不出现错误,但是返回结果为空,很是奇怪。

     在帮朋友调试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;


这一句运行时不出现错误,但是返回结果为空,很是奇怪。

cx.Close;
cx.sql.add('select * from T where id=:id'); // 这里id 是整数字段
cx.Prepare;
cx.ParamByName('id').Asinteger:=1475;
cx.Open;

当改成这样的化,就可以返回正常结果。

经过查询devart 的论坛,发现这是sql server 本身的问题。

 

要使第一段代码正常工作,需要增加一行代码。

cx.SpecificOptions.Values['DescribeParams'] := 'True';
cx.Close;
cx.sql.add('select * from T where id=:id'); // 这里id 是整数字段
cx.Prepare;
cx.ParamByName('id').AsString:='1475';
cx.Open;

这样sql server 就可以正常解析参数了。

 

在kbmmw 中使用unidac 访问sql server 的同学,如果遇见类似这样的问题,可以参考一下。

 

 

       q := TUniQuery.Create(nil);
        q.Options.FieldsOrigin := True;
        SetSpecificOptions(q.SpecificOptions);
        q.Connection := c.Database;
        q.SQL.Assign(CookedQuery);

       q.SpecificOptions.Values['DescribeParams'] := 'True'; // 这一句对sql server 很重要
        q.Prepare;
        UniDACCopyInputParamsValueAndType(Params,q.Params,
                                          Connection.ConnectionPool.MetaData.UnicodeOptions);
        q.Open;

        // After the query is open, also remember to get the resulting params from it.
        Params.Assign(q.Params);
        Result:=q;

 

 2017.3.8

最新kbmmw已经支持直接在控件中设置上面属性,不用修改源码了。

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章