delhpi 7 +ado +sql serve 做的三层应用中,用sql语句提交,中文字符只保存一半,为什么
1楼: 问题是:我用delhpi 7 +ado +sql serve 做的三层应用中,在数据保存中,用‘insert into 表名 set 列名=:lm’
parameterbyname(lm).assting:=edit1.text
就这么简单的语句,可是在edit1.text中输入中文的时候,提交后,库中只有字符串的一半,例如edit1.text=“数据“,而提交后,库中只有‘数‘一个字
而当edit1.text 是英文或数字的时候,提交正常
想其各位大侠给指点,指点,越快越好
字串7
2楼: 请大家帮忙,帮忙字串8
3楼: 是不是数据字段不够长度啊?中文比英文所占字节数要多!字串9
4楼: insert into 表名 set 列名=:lm’ 语法有问题吧!!!
应该是:
insert into 表名(列名)Values(:lm)
ParameterByName(Lm).Values :=Trin(edit1.text) 字串8
5楼: 不是这样的,数据字段够长,char 40
而且现象是不管你输入多少汉字,它都只取一半,比如“中文字符”,它就提交“中文”,“中文”就提交“中” 字串2
6楼: 刚才比较急写错了,程序中是 insert into 表名(列名)Values(:lm) ParameterByName(Lm).Values :=Trim(edit1.text) 这个语句字串3
7楼: 请大家给指点指点,是不是我在建立数据库中有什么错误, 字串7 8楼: 有夠奇怪的問題 把Trim(edit1.text),去掉,改成直接:=‘中文‘; 如果沒有問題,就是edit1的問題,檢查一下,實在不行,刪掉重新放一個 如果還有問題那就改語法試試 sql.add(‘insert into tableA (field1) values(‘‘‘+trim(edit1.text)+‘‘‘)‘); 如果還不行....那我就再想想 字串3 9楼: Query.Close; Query.SQL.Clear; Query.SQL.Add(‘Insert into Bbs(Name)Values(:LM)‘); Query.Parameters.ParamByName(‘Lm‘).Value:=Trim(Edit1.Text); Query.ExecSQL; 我刚试过,是好的啊!你再看看上面的 字串5 10楼: 我跟踪了一下程序, Query.Close; Query.SQL.Clear; Query.SQL.Add(‘Insert into Bbs(Name)Values(:LM)‘); Query.Parameters.ParamByName(‘Lm‘).Value:=Trim(Edit1.Text); 在这里查看了一下Query.Parameters.ParamByName(‘Lm‘).Value就是 Trim(Edit1.Text);, .... Query.ExecSQL; 到了这里看数据库就成了edit1.text 的一半了字串7
11楼: 是不是在sql serve在建立数据库的时候,要选择字符集呀,你们都是用默认的设置么 字串1 12楼: 数据库的字符集改变过了没有? 字串5 13楼: 没有 字串9 14楼: sql.add(‘Insert into Bbs (Name) Values(‘‘‘+trim(edit1.text)+‘‘‘)‘);
試試看 字串7
15楼: 是的,一般都用默认的设置!问题就出在你的数据库表中结构啊!!!你不防再建立一个新表,试一下啊!!! 字串1
16楼: 顶 字串4
17楼: insert into 表名(列名)Values(:lm) ParameterByName(Lm).Size :=Length(Trim(edit1.text)) ParameterByName(Lm).Values :=Trim(edit1.text)字串9
18楼: 用 varchar 或者 nvarchar 字串9 19楼: 俺写的三层程序根本就不存在这个问题,有空看看我的待答问题。 字串9 20楼: 用nchar试试 先再查询分析器中执行一下看看字串1
21楼: 偶以前做的好像没有这个问题啊!费解 字串3 22楼: 顶 字串5 23楼: 用
sql.add(‘Insert into Bbs (Name) Values(‘‘‘+trim(edit1.text)+‘‘‘)‘);
应该没问题的 字串5 24楼: 谢谢大家,我直接提交两次,不过是很笨,可是找不到是那里的错。 字串7 上一篇:一个大家普遍关注的问题——播放器功能扩展!! 下一篇:怎么样限定memo的行长度