为什么我写入SQL的时候字符串被截取掉了?(50分)

  • 主题发起人 主题发起人 lippo
  • 开始时间 开始时间
L

lippo

Unregistered / Unconfirmed
GUEST, unregistred user!
我用TADOQuery向SQL数据库插入数据,具体代码如下:
ywmc := '赎回代理费';
rq = DateToStr(date());

with ADOQuery1 do
begin
close;
sql.clear;
sql.add('insert into qspz ');
sql.add('select jjdm,jjjc,ywmc = :ywmc1,jzrq = :rq1 from jyhb');
parameters.parambyname('ywmc1').value = ywmc;
parameters.parambyname('rq1').value = rq;
sql.execsql;
sql.close;
end;
把ywmc1和rq1传给ywmc、jzrq这两个字段。现在的问题是ywmc字段只写入了'赎回',后面的'代理费'没有了,rq显示正常。不知道是什么原因,我写的语句是否有问题?这样的参数需要怎么传?
 
看看你的ywmc字段长度吧
 
我ywmc字段设置的是char(30),null 长度是够的
 
我纳闷的是同样是字符串,日期的就可以通过参数传进去,而ywmc就值传了前面两个字。我在参数传递的语句前面加了showmessage(ywmc),输出的结果确实是“赎回代理费”。
 
用这个语句'select jjdm,jjjc,ywmc = ''赎回代理费'',jzrq = :rq1 from jyhb',不用参数就没有问题了,是不是value默认长度是4位?搞不明白啊。
 
试试设置一下ANSI_NULL和ANSI_WARNING
 
这是parameters处理中文的一个bug;在sql语句中直接用变量可以避免:
sql.add('select jjdm,jjjc,ywmc = '+ ywmc + ,jzrq = :rq1 from jyhb');
 
我是试着按你说的改了,但提示列名“赎回代理费”无效。
sql.add('select jjdm,jjjc,ywmc = '+ ywmc + ,jzrq = :rq1 from jyhb');
你这句话里面是不是少了一个引号?
sql.add('select jjdm,jjjc,ywmc = '+ ywmc +' ,jzrq = :rq1 from jyhb');
我这样改了,还是不行。我先直接用常量算了。
 
需要加入
parameters.parambyname('ywmc1').size := 30;

另外:
pascal 中赋值需要使用 := , 不能用 =

如果要在sql.add中使用字符值连接, 要用 QuotedStr(ywmc)

sql.execsql;
sql.close;
这两句也是错误的, 要把 sql. 去掉
 
正确应该是这样,ywmc,rq1是常量
sql.add('select jjdm,jjjc,'''+ ywmc + ''' ,'''+rq1+''' from jyhb');
 
stlont的方法很对,那两条语句我确实写错了,多谢stlont,分数送上。
 
stlont分数收到了没有?我怎么给不到你啊?
 
后退
顶部