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

 

 

时间: 2024-10-23 14:40:50

unidac 访问sql server 字符查询参数失效问题及解决办法的相关文章

SQL Server不允许进行远程连接的解决办法

刚刚安装的数据库系统,按照默认安装的话,很可能在进行远程连接时报错,通常是错误:"在连 接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server的连接) ",现在针对此 问题总结如下: 明白了SQL Server是个网络数据库就可迎刃而解了,简单的分为下面的几种情况. ◆1.数据库引擎没有启动.有两种启动方式: (1)开始-&g

SQL server 2008 无法连接Local服务器的解决办法

 SQL server 2008 中连接local服务器时,显示无法找到local                 然后打开开始--所有程序--SQL server2008 --配置工具--SQL server配置管理器     打开配置管理器以后,打开SQL server服务,启动SQL server(MSSQLSERVER) 和SQL server 代理(MSSQLSERVER)     然后再打开SQL server网络配置--MSSQLSERVER的协议,启用TCP/IP 然后再次连接l

SQL Server 连接到服务器 错误233的解决办法_mssql2005

我的SQL Server2005 一直正常使用但昨天出现了错误,如图. 经过上网查,网上说的办法试了好多都没有解决这个问题.在经过多次的摸索后终于搞定了,答案很简单,是sql身份验证 "sa"账号 登录密码的问题. 但是前提是你必须得保证你的sql server 的sql 身份验证可以用,所以在这里我们就先给大家讲述下怎样使sql身份验证可以启用 (sql server身份验证可以用的直接跳过这一步). 首先用windows身份验证登录,windows身份验证不可以登录的请看我前面博客

JDBC连接SQL Server出现的connection refused问题的解决办法

使用JDBC在默认端口1433上连接SQL Server获得connection refused异常,大致异常信息为:The TCP/IP connection to the host  has failed. java.net.ConnectException: Connection refused. 1.使用telnet 127.0.0.1 1433测试,得到如下信息:正在连接到127.0.0.1...不能打开到主机的连接, 在端口 1433: 连接失败表示1433端口没有打开 2.检查SQ

总结 SQL Server 中死锁产生的原因及解决办法

server|解决 其实所有的死锁最深层的原因就是一个:资源竞争表现一:    一个用户A 访问表A(锁住了表A),然后又访问表B    另一个用户B 访问表B(锁住了表B),然后企图访问表A    这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了    同样用户B要等用户A释放表A才能继续这就死锁了解决方法:    这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法    仔细分析你程序的逻辑,    1:尽量避免同时锁

VFP中用SPT访问SQL Server数据库

VFP因它简单易学,可快速建立应用软件而深受广大程序员喜爱,但其数据库系统不安全也令广大用户非常头痛.随着MS SQL Server数据库系统的推广应用,其强大的安全性能普遍受到好评.笔者在长期的编程实践中,发现利用VFP的SQL pass-through(SPT)技术结合MS SQL Server数据库系统,也能像VB.Delphi.PowerBuilder一样轻松开发出优秀的客户/服务器(C/S)应用软件.现通过编写一个简单的通信录例子和广大VFP爱好者共同探讨. 一.服务器端MS SQL

使用 HTTP 访问 SQL Server

server|访问 使用 HTTP 访问 SQL Server可以使用 HTTP 访问 Microsoft SQL Server 2000.在可以使用 HTTP 指定查询前,必须先用用于 SQL Server 的 IIS 虚拟目录管理实用工具创建一个虚拟根. SQL Server 的 HTTP 访问能力使您得以: 直接在 URL 中指定 SQL 查询,例如: http://IISServer/nwind?sql=SELECT+*+FROM+Customers+FOR+XML+AUTO&root=

Delphi编程访问SQL Server数据库

delphi是一个优秀的可视化软件开发环境,并已广泛应用于数据库软件的开发.在DelphiC/S版环境中,结合其优化的数据库操作,以及Borland Database Engine(即:BDE,数据库引擎),对开发客户机/服务器系统下的网络数据库软件提供了更加快速有效的途径.在客户机/服务器系统中,服务器端我们采用Microsoft SQL Server6.0 for WindowsNT作为数据库服务器:另外,在客户端采用Delphi编写客户软件.在此,我们假定SQLServer设置完毕,并已经

ASP调用存储过程访问SQL Server

server|存储过程|访问     ASP与存储过程(Stored Procedures)的文章不少,但是我怀疑作者们是否真正实践过.我在初学时查阅过大量相关资料,发现其中提供的很多方法实际操作起来并不是那么回事.对于简单的应用,这些资料也许是有帮助的,但仅限于此,因为它们根本就是千篇一律,互相抄袭,稍微复杂点的应用,就全都语焉不详了.     现在,我基本上通过调用存储过程访问SQL Server,以下的文字虽不敢保证绝对正确,但都是实践的总结,希望对大家能有帮助.      存储过程就是作