CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

急!!!关于MS SQL Server的字符字段的空格问题

楼主snakezou()2000-12-21 16:10:00 在 Delphi / VCL组件开发及应用 提问

我在用MS   SQL   Server做后端数据库的时候,发现如果用的是字符字段(无论是char还是varchar),当用Delphi5中的DBGrid来显示数据的时候,返回的数据中都会有一定的空格来凑满定义的字段长度,不知各位高手有何方法可以解决此问题.100两银子奉送.(我用ADO组件连接的数据库). 问题点数:100、回复次数:16Top

1 楼comanche(太可怕)回复于 2000-12-21 16:12:00 得分 0

没这回事Top

2 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2000-12-21 16:23:00 得分 0

没这回事,  
  读出字段来,测试一下串长;Top

3 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2000-12-21 16:25:00 得分 0

那是空档,   不是空格!!!  
  如果空档都不允许,那你想怎样处理?  
   
  Top

4 楼ender(ender)回复于 2000-12-21 16:32:00 得分 0

不会这样啊,除非你的数据本来后面就是有空格的!  
  你看看你数据库里的原始数据!Top

5 楼wenzm(魔术师)回复于 2000-12-21 16:49:00 得分 0

老兄,搞错了吧,oracle好像才有这样的问题,我做了多过系统都是用SQlserver都没有发现过这样的问题!Top

6 楼largewang(成都:王臻义[老王][C#学习中断])回复于 2000-12-21 16:52:00 得分 30

请问这个字段的内容是怎么写进去的,我怀疑你用的是Pchar变量,它在获得内存的时候是固定长度的,所以要用"#0"填充,你只要将第一个#0后的干掉后转换为string就行了。Top

7 楼Raptor(猛禽)回复于 2000-12-21 20:27:00 得分 30

改用VARCHAR,然后用:  
  UPDATE   TABLE1   SET   FIELD1   =   TRIM(   FIELD1   )  
  把空格去掉就OK了.Top

8 楼clacklin(海风)回复于 2000-12-21 20:43:00 得分 0

to   wenzm:  
  oracle好象也没这种问题吧!?Top

9 楼zeroxy(水蓝)回复于 2000-12-22 02:09:00 得分 10

dbgrid中的宽度并不是根据这个字段中记录长度变化的,因为你在生成这个字段时已经定死了  
  它的宽度,注意你Dataset控件中的field,所以dbgrid中的显示除非你写代码控制某column  
  的宽度,不然不会变的!Top

10 楼zeroxy(水蓝)回复于 2000-12-22 02:13:00 得分 0

比如,你知道这个字段中最长记录的长度是19,你可以通过field[1].displaywidth:=19来控制Top

11 楼snakezou()回复于 2000-12-25 09:50:00 得分 0

我试了一下,如果直接用ADOConnection连接数据库并用ADOTable(或ADOQuery)的话,varchar类型无空格返回,char类型则有,例如数据库MyOffice中有一表格People,其中字段PSearch为char类型,长度为7,我用SQL   Server的Enterprise   Manager查看的时候,其中的内容为'abc         ',而且无法删除后面的空格(这时的空格可能是系统自己加的空档,因为我输入的是'abc',另我是直接从DBGrid中输入的),ADOQuery得到的数据的长度也是7,即使我从DBGrid中将空格删除,post之后仍然不行。  
      由于我是打算在N-Tire结构中使用,当我在客户端连接到服务器并且用DBGrid显示时,char类型仍有空格,若数据库中有一varchar类型的数据'abc',字段长度为6,则显示时为'abc',但是只要变动一下,例如改为'ab',当ApplyUpdates并且Refresh后,则数据变为'ab         ',且数据库中的数据也变更为'ab         '.  
   
  我用的MS   SQL   Server版本为7.0,Delphi版本为5.0,N-Tire结构(用的DCOM),服务端用ADOConnection以及ADOQuery做的连接,客户端用ClientDataSet连接.Top

12 楼sqtang(蚂蚁)回复于 2000-12-25 19:07:00 得分 15

我也遇到过类似问题。  
  我当时是在要用到这个数据的地方读出来用trim函数去掉后缀空格。Top

13 楼comanche(太可怕)回复于 2000-12-25 23:08:00 得分 15

这事我还是没有,我现正点写的程序跟你一样,也是ADO连接,三层结构  
  你看看   Field中   FixedChar是否指定为true?Top

14 楼snakezou()回复于 2001-01-03 08:23:00 得分 0

感谢大家的回复,尽管问题没有解决,但是谢谢大家的热情。  
  我把帖子放到数据库论坛上去看一看。  
  现把分数奉上。Top

15 楼ccat(智拙)回复于 2001-03-15 03:06:00 得分 0

这事儿我遇到过,rtrim可以解决,不行再加一个ltrim,甚至可以用replace函数,总之放在后台。Top

16 楼itren(火神)回复于 2001-09-27 12:14:43 得分 0

我觉得应该是数据库的设置问题:到底在那里我也在找Top

相关问题

  • 关于MS SQL Server的字符字段的空格问题
  • 求一Oracle SQL语句,如果表中的某个字段(char或varchar2型)的所有字符都是些空格,就将它设为NULL,以节省空间
  • sql语句中的字段排序问题(字段含字符和数字)
  • 如何取得某字符型字段的第2,3个字符?(SQL 6.5)
  • 怎么处理在SQL中字符串为NULL的字段啊?
  • sql server6.5 能否修改字符字段宽度?
  • 关于SQL中char字段中的字符操作问题
  • 求一随机字符串更新字段的SQL语句
  • SQL Server中字段长度超过255字符的问题
  • 有关sql字段字符替换的问题

关键词

  • 字段
  • 数据库
  • 数据
  • 连接
  • 结构
  • 解决
  • 空格
  • 长度
  • dbgrid
  • 空档

得分解答快速导航

  • 帖主:snakezou
  • largewang
  • Raptor
  • zeroxy
  • sqtang
  • comanche

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo