Delphi中向access数据库中添加数据出现insert into语法错误,帮帮忙吧

alicewang01 2012-02-27 04:30:56
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Insert Into bumenshuju (Number,Name,Department) ');
ADOQuery1.SQL.Add('Values (:sNumber,:sName,:sDepartment)');
ADOQuery1.Parameters.ParamByName('sNumber').Value :=Edit1.Text;
ADOQuery1.Parameters.ParamByName('sName').Value :=Edit2.Text;
ADOQuery1.Parameters.ParamByName('sDepartment').Value :=Edit3.Text;
ADOQuery1.ExecSQL;
showmessage('OK!');
...全文
265 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Delphi程序猿 2012-03-07
  • 打赏
  • 举报
回复
这种现象在access数据库的insert语句中经常出现,有时根本不是语法错误,而是insert语句中的一些要求,为了安全起见,现在我想数据库中插入数据都采用

adoquery.append;
adoquery.fieldbyname('aa').asstring := ...;
adoquery.fieldbyname('bb').asinteger:= ...;
adoquery.post;

这样就不会出现insert中的问题了
蓝色的天堂 2012-02-29
  • 打赏
  • 举报
回复
把你动态执行转为静态,再进入ACCESS里的查询分析器,执行静态语句就一目了然了!
lzg827 2012-02-28
  • 打赏
  • 举报
回复
楼主,换个方式。
我从来都抵制用Parameters这种方式,原因很简单,没法得到最终执行的SQL语句。
当然,这只是个人习惯。

建议这样做:
定义个
SQLStr: string;

SQLStr := 'Insert Into bumenshuju (Number,Name,Department)values('''+trim(Edit1.Text)+''','''+trim(Edit2.Text)+''','''+trim(Edit3.Text)+''');
打个断点,取得SQL语句,放查询分析器看看到底什么地方错了。
我估计是你那几个Edit里面的数据有问题。

ADSLAN 2012-02-28
  • 打赏
  • 举报
回复
case5166说得太详细了 ACCESS给关键词打上[]是可以解释一些异常问题
我看见佛 2012-02-28
  • 打赏
  • 举报
回复
是关键字导致
我看见佛 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kaikai_kk 的回复:]
LZ的代码没有问题啊

另:拼接的方式防攻击,可以用quotedstr()函数
[/Quote]本人亲自测试了下,SQL SERVER是没问题的,ACCESS则有此问题,加上[]就好了
kaikai_kk 2012-02-28
  • 打赏
  • 举报
回复
LZ的代码没有问题啊

另:拼接的方式防攻击,可以用quotedstr()函数
lzg827 2012-02-28
  • 打赏
  • 举报
回复
大哥,你指的是SQL注入?
小弟只是从开发角度看这个问题,怎么能更快完成,调试方便,就只这样简单的目的。。。
如果还要考虑安全,这不是我这种薪水考虑的事情。
至少在这么多年做的项目而言,暂时都还比较安全的,(*^__^*) 嘻嘻……
被真正的黑客盯上了,我这个级别做出的东西,怎么做都不安全,不是么?

[Quote=引用 4 楼 corn1 的回复:]
引用 3 楼 lzg827 的回复:

楼主,换个方式。
我从来都抵制用Parameters这种方式,原因很简单,没法得到最终执行的SQL语句。
当然,这只是个人习惯。

建议这样做:
定义个
SQLStr: string;

SQLStr := 'Insert Into bumenshuju (Number,Name,Department)values('''+trim(Ed……
[/Quote]
Corn1 2012-02-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lzg827 的回复:]

楼主,换个方式。
我从来都抵制用Parameters这种方式,原因很简单,没法得到最终执行的SQL语句。
当然,这只是个人习惯。

建议这样做:
定义个
SQLStr: string;

SQLStr := 'Insert Into bumenshuju (Number,Name,Department)values('''+trim(Edit1.Text)+''','''+tri……
[/Quote]

建议你改用参数吧。你这种方式很容易受到攻击
我看见佛 2012-02-27
  • 打赏
  • 举报
回复
ADOQuery1.SQL.Add('Insert Into bumenshuju (Number,Name,Department) ');
汗,有关键字,,改成这个ADOQuery1.SQL.Add('insert into bumenshuju ([Number],[Name],[Department]) ');
我看见佛 2012-02-27
  • 打赏
  • 举报
回复
晕,,是正常的哦,,

2,497

社区成员

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

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