with form1.ADOQuery2 do
begin
close;
SQL.Clear;
sql.Add('insert into materials(a,b,c,d,e,');
Sql.add('f,g,h,i,j,');
Sql.add('k,l,m,n,o,p,q)');
sql.add('values(:a,:b,:c,:d,:e,');
sql.add(':f,:g,:h,:i,:j,');
sql.add(':k,:l,:m,:n,:o,:p,:q)');
parameters.ParamByName('a').value:=trim(edit2.Text);
parameters.ParamByName('b').value:=trim(edit1.Text);
parameters.ParamByName('c').value:=trim(edit3.Text);
parameters.ParamByName('d').value:=trim(edit4.Text);
parameters.ParamByName('e').value:=trim(edit5.Text);
parameters.ParamByName('f').value:=trim(edit6.Text);
parameters.ParamByName('g').value:=trim(edit7.Text);
parameters.ParamByName('h').value:=trim(edit8.Text);
parameters.ParamByName('i').value:=trim(edit9.Text);
parameters.ParamByName('j').value:=trim(edit10.Text);
parameters.ParamByName('k').value:=trim(edit11.Text);
parameters.ParamByName('l').value:='';
parameters.ParamByName('m').value:='';
parameters.ParamByName('n').value:='';
parameters.ParamByName('o').value:='';
parameters.ParamByName('p').value:='';
parameters.ParamByName('q').value:='';
execsql;
我用的是access数据库
上述代码中a到q都是数据表materials的字段(在我的原程序中字段都是汉字,这里用字母代替了,由于字段比较多,我在程序中用分行显示),其中a、b数据类型在access数据表中显示的是“文本”,其他的都是“数字”,我的界面中edit1,edit2输入的都是汉字加字母组合的字符串,而其他的edit都输入的是数字。l到m在数据表中是空值,界面中也不输入具体值。
但我运行时,输入相关内容后总是显示“insert into 语句的语法错误”,不知道这是哪里出错了,请教各位高人,谢谢!
begin
close;
SQL.Clear;
sql.Add('insert into materials(a,b,c,d,e,');
Sql.add('f,g,h,i,j,');
Sql.add('k,l,m,n,o,p,q)');
sql.add('values(:a,:b,:c,:d,:e,');
sql.add(':f,:g,:h,:i,:j,');
sql.add(':k,:l,:m,:n,:o,:p,:q)');
parameters.ParamByName('a').value:=trim(edit2.Text);
parameters.ParamByName('b').value:=trim(edit1.Text);
parameters.ParamByName('c').value:=trim(edit3.Text);
parameters.ParamByName('d').value:=trim(edit4.Text);
parameters.ParamByName('e').value:=trim(edit5.Text);
parameters.ParamByName('f').value:=trim(edit6.Text);
parameters.ParamByName('g').value:=trim(edit7.Text);
parameters.ParamByName('h').value:=trim(edit8.Text);
parameters.ParamByName('i').value:=trim(edit9.Text);
parameters.ParamByName('j').value:=trim(edit10.Text);
parameters.ParamByName('k').value:=trim(edit11.Text);
parameters.ParamByName('l').value:='';
parameters.ParamByName('m').value:='';
parameters.ParamByName('n').value:='';
parameters.ParamByName('o').value:='';
parameters.ParamByName('p').value:='';
parameters.ParamByName('q').value:='';
execsql;
我用的是access数据库
上述代码中a到q都是数据表materials的字段(在我的原程序中字段都是汉字,这里用字母代替了,由于字段比较多,我在程序中用分行显示),其中a、b数据类型在access数据表中显示的是“文本”,其他的都是“数字”,我的界面中edit1,edit2输入的都是汉字加字母组合的字符串,而其他的edit都输入的是数字。l到m在数据表中是空值,界面中也不输入具体值。
但我运行时,输入相关内容后总是显示“insert into 语句的语法错误”,不知道这是哪里出错了,请教各位高人,谢谢!
解决方案 »
- 谁会用ICS操作Cookie
- delphi 的流的问题writebuffer,传送Stream的函数,有些看不明白,请各位懂delphi TStream 的大虾们指点
- 请教一com口的问题.谢谢
- 多个apf文件如何合并成一个APF文件,且还能分页显示
- Delphi7 or Delphi8
- 简单问题,如何将'字符赋值给一个变量?
- EM_SCROLLCARET消息是做什么用的?
- 怎样设置shelltreeview的根目录的名字
- 各位大哥请帮忙,关于C/S结构的软件开发问题?在线等待!急!!!
- SQL2000数据库内的BMP如何转换成JPG?
- 我想做个网络验证系统,步骤是什么?
- delphi中如何判断数据库中字段是否允许空值及获取字段默认值?
sql.Add('insert into table1(a,b)values(:a,:b)');
parameters.ParamByName('a').value:=''''+trim(edit2.Text)+''''; //字符串前后加'
parameters.ParamByName('b').value:=trim(edit1.Text); //是数字保持原状建议你使用sql.savetofile('c:/1.txt');查看最终提交的语句到底是什么。
begin
close;
SQL.Clear;
sql.Add('insert into materials (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q)'
+ 'values(:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k,:l,:m,:n,:o,:p,:q)'); parameters.ParamByName('a').value:=trim(edit2.Text);
parameters.ParamByName('b').value:=trim(edit1.Text);
parameters.ParamByName('c').value:=strtoint(edit3.Text); //注意区分输入值的类型
parameters.ParamByName('d').value:=strtoint(edit4.Text);
parameters.ParamByName('e').value:=strtoint(edit5.Text);
parameters.ParamByName('f').value:=strtoint(edit6.Text);
parameters.ParamByName('g').value:=strtoint(edit7.Text);
parameters.ParamByName('h').value:=strtoint(edit8.Text);
parameters.ParamByName('i').value:=strtoint(edit9.Text);
parameters.ParamByName('j').value:=strtoint(edit10.Text);
parameters.ParamByName('k').value:=strtoint(edit11.Text);
parameters.ParamByName('l').value:='';
parameters.ParamByName('m').value:='';
parameters.ParamByName('n').value:=0;
parameters.ParamByName('o').value:=0;
parameters.ParamByName('p').value:=0;
parameters.ParamByName('q').value:=0;
execsql;
end;
其中a、b数据类型在access数据表中显示的是“文本”,其他的都是“数字”
那么除Edit1,Edit2可以是文本,其它必须是数字内容,且
parameters.ParamByName('l').value:='';
要写成
parameters.ParamByName('l').value:=0;
最好在
parameters.ParamByName('c').value:=trim(edit3.Text);
前判一下它的内容是否为数字
简单的:
try
strtoint(trim(edit3.text));
except
ShowMessage('请在Edit3.Text中输入数字');
exit;
end;
''''+trim(edit2.Text)+''''仍然出现“insert into 语句的语法错误”错误。
好好检查一下类型 看看出错的地方 比如数字型是整数还上浮点数
推荐你一款软件 《万能查询分析器》 能在access上用的 根sqlserver的一样
到那里执行insert 就能更方便的看出是那里的问题
http://www.skycn.com/soft/31613.html ----万能查询分析器
看看
然后再把你得到的SQL语句考备到ACCess里的SQL里去运行一遍
就知道哪儿的问题了
出现''is not a valid floating point value ,说明你的edit4.Text为空,而''是不能转为数字的
你要将edit3~edit11的text都设为数字,如果没有值,将它们的text设为'0'
sql := sql + 'VALUES(' + ''''+B1+''''+',';
sql := sql + ''''+B2+''''+',';
.......
sql := sql + ');edit1.text := sql ;
try
q.sql.text ::= sql ;
q.execsql;
except
///
end;
然后把生成的SQL在查询分析器中运行一下就行了。