zoukankan      html  css  js  c++  java
  • 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;


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

    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已经支持直接在控件中设置上面属性,不用修改源码了。

  • 相关阅读:
    vs2015调试慢
    阿里正式发布《Java开发手册》终极版!
    为什么听有些人讲话让人抓狂
    hibernate 映射实例 学生 课程 成绩
    hibernate 树状映射
    hibernate 一对多双向的CURD
    hibernate 多对多双向关联
    hibernate 多对多单向
    hibernate 一对多双向
    hibernate 一对多关联
  • 原文地址:https://www.cnblogs.com/xalion/p/3538497.html
Copyright © 2011-2022 走看看