数据库我用的是sqlserver
窗口上有两个edit控件
然后执行
insert into table(c1,c2)values('+edit1.text+','+edit2.text+');当我在text中输入数字的时候可以插入。。但一输入英文或汉字就提示上下文错误。
急!!!!!
窗口上有两个edit控件
然后执行
insert into table(c1,c2)values('+edit1.text+','+edit2.text+');当我在text中输入数字的时候可以插入。。但一输入英文或汉字就提示上下文错误。
急!!!!!
if not(Key in ['0'..'9',#13,#8,'.']) then
报错信息
else
…………
ADOQUERY1.Parameters.ParamByName('a').ASSTRING:=edit1.text;
ADOQUERY1.Parameters.ParamByName('b').ASSTRING:=edit2.text;
SQL.add('Insert Into table(c1,c2)');
SQl.add('Values(:aa,:bb)');
Params[0].AsString := Edit1.Text;
Params[1].AsString := Edit2.Text;
在SQL中这符串要加引号
比如 在SQL这么写
select * from table where 姓名='xxx'
在delphi 中 由于'是字符串分割符,要表于 ' 要加转义字符 '
所以,写成
sql.add('SELEct * from table where 姓名='''+edit.text+''''
主要是把引号分清了
当editk中你用数字的时候,这一句变成了
select * from table where 姓名=123
sql为做强制类型转换 所以不报错
但用字符串时
就出现语法错误,SQL中会把他作 一个参数,但又找不到定义
楼上大哥们的写法都能解决问题
ADOQUERY1.Parameters.ParamByName('A').ASSTRING:=edit1.text;
ADOQUERY1.Parameters.ParamByName('B').ASSTRING:=edit2.text;
ADOQUERY1.Open;
罗嗦insert into table(c1,c2)values('+QuotedStr(edit1.text)+','+QuotedStr(edit2.text)+')';原因
1、没有加引号,可以通过QuotedStr()函数加入
2、values()最后没有加右括号,SQL语句不完整
insert into table(c1,c2)values(:a,:b)
ADOQUERY1.Parameters.ParamByName('a').ASSTRING:=edit1.text;
ADOQUERY1.Parameters.ParamByName('b').ASSTRING:=edit2.text;
都可以
const
sqlstr = 'insert into table(c1,c2)values(''%s'',''%s'')';
begin
adoquery.execsql(format(sqlstr,[edit1.text,edit2.text]));
end;这样写比较清楚,也不会写出带一大堆加号的sql语句
但是表达的意思就是那个sql了
如果字段是数字型的可以直接用字符串相加得到sql语句,但如果字段是字符型的,就要用到参数了。ADOQUERY1.SQL := 'insert into table(c1,c2)values(:A,:B)';
ADOQUERY1.Parameters.ParamByName('A').ASSTRING:=edit1.text;
ADOQUERY1.Parameters.ParamByName('B').ASSTRING:=edit2.text;
ADOQUERY1.Open;
===============================================================================
adoquery能写出这样的语句吗,好像后面哪个asstring出不来,我发帖子问过这个问题。
个人认为好像只有tquery能这样写