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

  • 相关阅读:
    python项目打包成exe
    sql同比环比计算
    七款好看文字样式纯css
    一站式智能芯片定制技术
    实战清除电脑上恶意弹出广告窗口
    GAAFET与FinFET架构
    MIPI多媒体接口
    Intel GPU实现游戏与数据中心
    芯片倒爷赚钱术
    Cache Memory技术示例
  • 原文地址:https://www.cnblogs.com/xalion/p/3538497.html
Copyright © 2020-2023  润新知