数据库查询?(50分)

  • 主题发起人 主题发起人 fossil
  • 开始时间 开始时间
F

fossil

Unregistered / Unconfirmed
GUEST, unregistred user!
var a: array [0..6]of char;
begin
a:='abcd';
with adodataset do
begin
close;
commandtext:='select * from table';
open;
insert;
fieldbyname('a').AsString:= a; //A字段为varchar ,长度为7
post;
close;
commandtext:='select * from table where a='+a;
open; //总报错说invalid colum 'abcd'到底什么原因啊


end;
end;
 
commandtext:='select * from table where a='+''''+a+'''';
 
你这个程序存在几个问题,第一个就是 天什 所说的,要更正。
另外你出问题的主要原因,是你在Query里面,最可能是在DBGrid里面增加了字段,其中FieldName设置为Abcd
所以一执行就会出现Abcd的列找不到,其实根本就没有呀。
 
commandtext:='select * from table where a='''+a+''';
 
commandtext:='select * from table where a='+#39+a+#39;
 
asd真是觉得特别感谢大家
WEW:为什么你的所写的不可以通过?
天什:你能解释一下?
 
呵呵,我说了,看来你不信了。
对了,我帮 天什 解释一下吧:
因为作为Delphi,本身是使用“'”作为分隔字符的。
而SQL语言中,也是使用“'”作为分隔字符的。
所以导致很多问题,就是通常所说的四个分号=一个分号的问题。
至于wem的为什么通不过,是因为他最后却了一个分号,编译就过不去。
 
抱歉。我还是不知道你在说什么
 
字符串应该用单引号括起来,你没有这样做。另外在字符串中写单引号的方法是:写两个单引号。
最后,大家为什么不用ParamByName('a').AsString := a;
而commandtext:='select * from table where a = :a'
大家不喜欢这种方式吗?
 
那种方式比较容易出错。
而且出错得时候不容易调试。所以一般都是拼写出完整得SQL语句,然后再执行。
 
后退
顶部