我刚学delphi对这个不是很懂,在这个用delphi中ADOQuery控件访问数据库遇到了一些问题,请各位帮帮忙

zzhqiao 2007-12-27 11:00:55
我在一个窗体上放了一个ADOQuery控件一个按钮控件 ,ADOQuery控件的ConnectionString属性我连接到了我计算机上的一个数据库,SQL属性写了一条 select *from su;(su是表名)Active属性我设为了true;在按钮的单击事件里面我写了如下代码:
procedure TForm1.Button1Click(Sender: TObject);
var sqlstr:string;
begin
sqlstr:='insert into su (id,name) values('''+'90'+''','''+'wu'+''');';
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqlstr);
ADoQuery1.Open;
end;

end.
结果能运行,当我单 击按钮时报错, 但是数据却能写到数据库中去
...全文
199 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzhqiao 2009-10-20
  • 打赏
  • 举报
回复
呵呵,以前都不知道怎么看回复,都没有看到。快2年了,现在重新学delphi看到了这个。
阿三 2008-01-04
  • 打赏
  • 举报
回复
发表于:2008-01-01 12:07:258楼 得分:0
改成这样:
procedure TForm1.Button1Click(Sender: TObject);
var sqlstr:string;
begin
sqlstr:='insert into su (id,name) values('''+'90'+''','''+'wu'+''');';
ADoQuery1.close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqlstr);
ADoQuery1.execsql;
end;

end.
可以结帖子了!

这种写法也有些繁索,比如有十几二十个字段,你写这句SQL一会 引号都得把自己弄晕了

建议这样写
with adoquery1 do
begin
close;
sql.text := ' nsert into su (id,name) values (:id,:name)';
Parameters.parambyname('id').values := 90;
parameters.parambyname('name').values := 'wu';
execsql;
end;
这样写的好处,第一简单易读,有错误也容易查找,第二提高数据库的处理速度
weill 2008-01-03
  • 打赏
  • 举报
回复
学会了事务,不错,踩一脚留个记号。
jxjjljf 2008-01-03
  • 打赏
  • 举报
回复
ding
ehappy 2008-01-02
  • 打赏
  • 举报
回复
楼上说得对
wflin20082008 2008-01-01
  • 打赏
  • 举报
回复
改成这样:
procedure TForm1.Button1Click(Sender: TObject);
var sqlstr:string;
begin
sqlstr:='insert into su (id,name) values('''+'90'+''','''+'wu'+''');';
ADoQuery1.close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqlstr);
ADoQuery1.execsql;
end;

end.
可以结帖子了!
csdn小虫 2007-12-31
  • 打赏
  • 举报
回复
sqlstr:='insert into su (id,name) values('''+'90'+''','''+'wu'+''');'
感觉这里的'有错
sqlstr:='insert into su(id,name) values('+''''+'90'+''''+','+'''wu'''+')';
还有就是execsql
wangxuelid 2007-12-31
  • 打赏
  • 举报
回复
利用事务来控制
adoconnection.begintrans;
try
with adoquery do
begin
close;
sql.text := '';
execsql;
end;
adoconnection.CommitTrans;
except
adoconnection.RollbackTrans;
showmessage('出错');
end;
这样就不会有问题可能还会插入到数据库中了....
//到现在还不会用时务处理问题,,,汗,,,学习 ,,
ipbdq 2007-12-31
  • 打赏
  • 举报
回复
楼上聪明。
阿三 2007-12-29
  • 打赏
  • 举报
回复
利用事务来控制
adoconnection.begintrans;
try
with adoquery do
begin
close;
sql.text := '';
execsql;
end;
adoconnection.commit;
except
adoconnection.rollback;
showmessage('出错');
end;
这样就不会有问题可能还会插入到数据库中了....
syc_cs 2007-12-29
  • 打赏
  • 举报
回复
ADoQuery1.Open;改成ADOQuery1.ExecSQL;
执行SQL语句用ExecSQL,查询用Open
sanguomi 2007-12-28
  • 打赏
  • 举报
回复
有数据集返回才用OPEN,INSET,DELETE,UPDATE用EXECSQL
Bear_hx 2007-12-27
  • 打赏
  • 举报
回复
ADoQuery1.Open;改成ADOQuery1.ExecSQL;执行SQL语句用ExecSQL,查询用Open

2,507

社区成员

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

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