delphi中使用ADOQuery时的几个问题解决方案

问题1、文参数的支持问题
今天在使用ClientDataSource查询的时候,“divece_name”参数赋值为“%笔记本电脑%”,但是使用sql server Profiler跟踪后发现查询的语句变为:

查询的数据提交到数据库时不完整,当我把N'@P1 varchar(8)', '%笔记本%'就可以正常执行了

我想可能是数据类型不正确,于是这么写:

cdsEquipment.Close;<br>cdsEquipment.Params.ParamByName('divece_name').DateType := ftWideString;
cdsEquipment.Params.ParamByName('divece_name').Value := '%' + txtDevice.Text + '%';
cdsEquipment.Open;

 但是提交到数据库的数据依然不完整:

最后在中间服务端的ADOQuery控件的BeforeOpen事件中加入如下代码就可以了:

adoqEquipment.Parameters.ParamByName('divece_name').Size := Length(adoqEquipment.Parameters.
ParamByName('divece_name').Value);

 重新设置参数长度,据说这是ADOQuery控件的BUG,对中文参数的支持问题

问题2、ADOQuery错误:ADOQuery1:commandtext does not return a result set
程序内容:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into DBhomework values('+Edit1.Text+','+Edit2.Text+','+ComboBox1.Text+','+Edit3.Text+','+Edit4.Text+')');
ADOQuery1.Open;
解决方法:
ADOQuery1.Open; 行改成 ADOQuery1.ExecSQL;
Select 之的 SQL 语句才用 ADOQuery1.Open;
附:
在select中用open方法,是正确的,但是在insert中代码能够执行,只是显示了上面的错误信息:ADOQuery1:CommandText does not return a result set,后来才知道ExecSQL方法是执行,不会要求SQL服务器给一个返回值,而对于select则能够使用open方法,有返回值。

问题3、ADOQuery错误:在此上下问中不允许使用名称"张三"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
程序内容:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into DBhomework(学号,姓名,性别,手机号码,班级) values('+Edit1.Text+','+Edit2.Text+','+ComboBox1.Text+','+Edit3.Text+','+Edit4.Text+')');
ADOQuery1.ExecSQL;
其中,“姓名”和“性别”的内容是中文。
语法上能够通过编译。SQLserver服务器里面是确定表内属性的是字符类型了,在server2005中也能够直接插入"张三"。在delphi中,把张三等中文换成数字或者字母能够成功插入。
怀疑是ADOQuery组件的问题,所以换成ADOCommand组件,程序内容如下:
Commandtext:='insert into DBhomework values('+Edit1.Text+','+Edit2.Text+','+ComboBox1.Text+','+Edit3.Text+','+Edit4.Text+')';
Execute;
出现一样的错误信息。

解决方法:
'+Edit2.Text+'和'+ComboBox1.Text+'改成'''+Edit2.Text+'''和'''+ComboBox1.Text+'''
其他的'也可以换成'''
附:
错误原因是:对于字符串字段属性没有加上引号,一直以为是SQLserver数据库建表中用的属性的数据类型问题,后来又想过会不会是Delphi数据类型转换问题,因为只要输入中文就会出现问题,曾经找到答案说加上双引号,试过了不对,不知道双引号在Delphi中是否等价于两个单引

网友评论
最新图文
  • 在delphi 获取特殊目录 SHGetSpecialFolderLocation SHGetPathFromIDList

    在写应用程序的时候,我们经常会用到读取windows系统的一些特殊的目录。比如 桌面 快速启动栏的路径等等。下面介绍两个API函数 SHGetSpecialFolderLocation SHGetPathFromIDList我们先看代码:  代码文件:unit Unit1;interfaceuses Wind,西西hvbet688园-最安全的下载资讯站。

  • Delphi通过ADO读写数据库

    ADO是一种程序对象,用于表示用户数据库中的数据结构和所包含的数据。ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据。例如,如果您希,西西hvbet688园-最安全的下载资讯站。

  • Delphi如何实现抓图技术

    摘 要:本文以Delphi7.0作为开发平台,给出了网络监控hvbet688中的两种屏幕抓图技术的设计方法和步骤。介绍了教师在计算机机房内教学时,如何监控学生计算机显示器上的画面,以保证教学的质量和效果。  引言  随着网络技术的飞速发展,计算机网络在各高等院校教学中,西西hvbet688园-最安全的下载资讯站。

  • delphi中使用ADOQuery时的几个问题解决方案

    问题1、文参数的支持问题今天在使用ClientDataSource查询的时候,“divece_name”参数赋值为“%笔记本电脑%”,但是使用SQL Server Profiler跟踪后发现查询的语句变为:查询的数据提交到数据库时不完整,当我把N'@P1varchar(8)', '%笔记本%'就可,西西hvbet688园-最安全的下载资讯站。

  • android计时器、android 格式化时间计数器的实现

    完整的Android程序,主要功能是实现秒表计时需求:默认为"00:00:00",点击开始按钮时清零后开始计时,出现如10:28:34。点击停止的时候停止计时。问题:使用Calendar DateFormat的方法,不设置时区获取到的小时是本地时区的(东八区的就是8),设,西西hvbet688园-最安全的下载资讯站。