INSERT INTO 语句语法问题

hh200303 2008-09-05 09:26:00
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 语句的语法错误”,不知道这是哪里出错了,请教各位高人,谢谢!
...全文
181 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
masterjames 2008-09-10
  • 打赏
  • 举报
回复
sql := 'INSERT INTO A(A1,A2,A3)' ;
sql := sql + 'VALUES(' + ''''+B1+''''+',';
sql := sql + ''''+B2+''''+',';
.......
sql := sql + ');

edit1.text := sql ;
try
q.sql.text ::= sql ;
q.execsql;
except
///
end;
然后把生成的SQL在查询分析器中运行一下就行了。
fangsp 2008-09-05
  • 打赏
  • 举报
回复
你用ShowMessage(SQL.text);
看看
然后再把你得到的SQL语句考备到ACCess里的SQL里去运行一遍
就知道哪儿的问题了
dyonggan 2008-09-05
  • 打赏
  • 举报
回复
所有edit.text只能给字符串赋值,你看一下数据库中的每个字段,如果不是字符串都要在赋值时用相应的函数对edit。text进行转换。
ronal212121 2008-09-05
  • 打赏
  • 举报
回复
一定是字段数据类型的问题
好好检查一下类型 看看出错的地方 比如数字型是整数还上浮点数
推荐你一款软件 《万能查询分析器》 能在access上用的 根sqlserver的一样
到那里执行insert 就能更方便的看出是那里的问题
http://www.skycn.com/soft/31613.html ----万能查询分析器
hh200303 2008-09-05
  • 打赏
  • 举报
回复
我用的是parameters.ParamByName('d').value:=strtofloat(edit4.Text);

出现的错误是“''is not a valid floating point value ”。这个问题昨天困扰我好久,今天就把strtofloat给删了,就出现了上述错误。

此外我用Internetroot 的方法
''''+trim(edit2.Text)+''''

仍然出现“insert into 语句的语法错误”错误。
柯本 2008-09-05
  • 打赏
  • 举报
回复
程序没任何问题。问题出在数据上:
其中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;
zhll5812826 2008-09-05
  • 打赏
  • 举报
回复
with form1.ADOQuery2 do
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;
internetroot 2008-09-05
  • 打赏
  • 举报
回复
如果字段类型是字符串那么在insert语句的赋值部分要加转义字符',如insert into table1(a,b)values('aaa',1)(此处假设a字段为字符串类型,b字段为数字类型)。而把他变成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');查看最终提交的语句到底是什么。
zhaoxiaohao 2008-09-05
  • 打赏
  • 举报
回复
acess不了解,對于number type:是否需要strtoint(trim(edit5.text))一下?edit的內容好像是數組
柯本 2008-09-05
  • 打赏
  • 举报
回复
如果你的parameters.ParamByName('d').value:=strtofloat(edit4.Text);
出现''is not a valid floating point value ,说明你的edit4.Text为空,而''是不能转为数字的
你要将edit3~edit11的text都设为数字,如果没有值,将它们的text设为'0'

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧