社区
Delphi
帖子详情
急!!!关于MS SQL Server的字符字段的空格问题
snakezou
2000-12-21 04:10:00
我在用MS SQL Server做后端数据库的时候,发现如果用的是字符字段(无论是char还是varchar),当用Delphi5中的DBGrid来显示数据的时候,返回的数据中都会有一定的空格来凑满定义的字段长度,不知各位高手有何方法可以解决此问题.100两银子奉送.(我用ADO组件连接的数据库).
...全文
334
16
打赏
收藏
急!!!关于MS SQL Server的字符字段的空格问题
我在用MS SQL Server做后端数据库的时候,发现如果用的是字符字段(无论是char还是varchar),当用Delphi5中的DBGrid来显示数据的时候,返回的数据中都会有一定的空格来凑满定义的字段长度,不知各位高手有何方法可以解决此问题.100两银子奉送.(我用ADO组件连接的数据库).
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
itren
2001-09-27
打赏
举报
回复
我觉得应该是数据库的设置问题:到底在那里我也在找
ccat
2001-03-15
打赏
举报
回复
这事儿我遇到过,rtrim可以解决,不行再加一个ltrim,甚至可以用replace函数,总之放在后台。
snakezou
2001-01-03
打赏
举报
回复
感谢大家的回复,尽管问题没有解决,但是谢谢大家的热情。
我把帖子放到数据库论坛上去看一看。
现把分数奉上。
comanche
2000-12-25
打赏
举报
回复
这事我还是没有,我现正点写的程序跟你一样,也是ADO连接,三层结构
你看看 Field中 FixedChar是否指定为true?
snakezou
2000-12-25
打赏
举报
回复
我试了一下,如果直接用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连接.
sqtang
2000-12-25
打赏
举报
回复
我也遇到过类似问题。
我当时是在要用到这个数据的地方读出来用trim函数去掉后缀空格。
马丁当
2000-12-22
打赏
举报
回复
比如,你知道这个字段中最长记录的长度是19,你可以通过field[1].displaywidth:=19来控制
马丁当
2000-12-22
打赏
举报
回复
dbgrid中的宽度并不是根据这个字段中记录长度变化的,因为你在生成这个字段时已经定死了
它的宽度,注意你Dataset控件中的field,所以dbgrid中的显示除非你写代码控制某column
的宽度,不然不会变的!
clacklin
2000-12-21
打赏
举报
回复
to wenzm:
oracle好象也没这种问题吧!?
猛禽
2000-12-21
打赏
举报
回复
改用VARCHAR,然后用:
UPDATE TABLE1 SET FIELD1 = TRIM( FIELD1 )
把空格去掉就OK了.
largewang
2000-12-21
打赏
举报
回复
请问这个字段的内容是怎么写进去的,我怀疑你用的是Pchar变量,它在获得内存的时候是固定长度的,所以要用"#0"填充,你只要将第一个#0后的干掉后转换为string就行了。
wenzm
2000-12-21
打赏
举报
回复
老兄,搞错了吧,oracle好像才有这样的问题,我做了多过系统都是用SQlserver都没有发现过这样的问题!
ender
2000-12-21
打赏
举报
回复
不会这样啊,除非你的数据本来后面就是有空格的!
你看看你数据库里的原始数据!
BCB
2000-12-21
打赏
举报
回复
那是空档, 不是空格!!!
如果空档都不允许,那你想怎样处理?
BCB
2000-12-21
打赏
举报
回复
没这回事,
读出字段来,测试一下串长;
comanche
2000-12-21
打赏
举报
回复
没这回事
sql
server
之
空格
A开发反馈
sql
server
表中
字段
有
空格
,数据同步到pg后表关联报错,B开发反馈在
sql
server
插入时没有带
空格
,查询时也没有用rtrim把
空格
去掉,但能正常查出数据。 由此引出几个关于
sql
server
空格
的
问题
:
Sql
server
是否会自己给
字段
补
空格
? 应该怎么看
sql
server
字符
串实际长度? 为什么在查询时没有用rtrim把
空格
去掉也能查出对应
字段
? 如果条件用...
sql
server
去除
字符
串首尾
空格
说起去除
字符
串首尾
空格
大家肯定第一个想到trim()函数,不过在
sql
server
中是没有这个函数的,却而代之的是ltrim()和rtrim()两个函数。看到名字所有人都知道做什么用的了,ltrim()去除
字符
串左边的
空格
,rtrim()去除
字符
串右边的
空格
,要去除首尾
空格
同时使用这个两个函数就好了。 测试: select ltrim(' test ') --去除左边的
空格
...
sql
server
数据库
字段
为
空格
的
问题
今天查
问题
遇到
sql
server
数据库中一张表里本来插入的数据为空但是变成了
空格
的
问题
。 刚开始考虑是因为程序逻辑有
问题
,检查了代码后没有异常,总共有a,b,c三个
字段
,都是同样的逻辑。a就是
空格
,b,c是空 开始从数据库方面下手查
问题
,首先查看
空格
在
字段
中的位置 因为
sql
server
在编译
sql
语句时会自动将a='',和a=' '编译为同样的'',会自动去掉前置
空格
因此使用a=' '...
sql
server
数据库
字段
出现
空格
字符
问题
SQL
中定义: char: 固定长度,存储ANSI
字符
,不足的补英文半角
空格
。 nchar: 固定长度,存储Unicode
字符
,不足的补英文半角
空格
varchar: 可变长度,存储ANSI
字符
,根据数据长度自动变化。 nvarchar: 可变长度,存储Unicode
字符
,根据数据长度自动变化。 解决方案: 业务中
字符
主键类建议优先使用varchar,nvarchar。 如使用cha...
SQL
SERVER
的
字段
类型说明
比如当你像一个长度为40个
字符
的VARCHAR型
字段
中输入一个长度为4的
字符
串TOL8后你再取出的数据的时候,数据的长度为4个
字符
,而你把VARCHAR换成CHAR型,你取出的将会是40各
字符
长度的数据,
字符
串后会被附加多余的
空格
,比如TOL8只有4个
字符
那么从CHAR中取出的数据是TOL8加上36个
空格
!MS的
SQL
Server
主要是由五种常常用到的
字段
,
字符
型,文本型,数值型,逻辑型,和日期型!INT(整型数据)表示范围是从-2,147,483,647 到 2,147,483,647 的整数。
Delphi
5,930
社区成员
262,943
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章