简单问题,在线求助!!

PrettyMurphy 2003-09-02 04:54:56
我在窗体上放了一个TADOConnection和一个TADOQuery控件

TADOQuery.Connection设置为TADOConnection

FormCreate事件如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
Cnn.ConnectionString:='DBQ=D:\123\Backup.mdb;DefaultDir=D:\123\;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;UID=admin;UserCommitSync=Yes;';
Cnn.Connected:=True;
end;

这个没错。正确连接上了。

procedure TForm1.Button1Click(Sender: TObject);
begin
Query.SQL.Clear;
Query.SQL.Add('Delete From BackupPath');
Query.ExecSQL;
showmessage('ok');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Query.SQL.Clear;
Query.SQL.Add('Select * from BackupPath');
Query.Open;
showmessage('ok');
end;

这是两个BUTTON的事件。我先执行Button1Click会显示OK,然后我再执行Button2Click也会显示OK,如果我再执行Button1Click,则会出错,出错代码如下:
Access violation at address 1F453E6E in module 'msado15.dll',Write of address 0117A028.

如果我先执行Button2Click的话会显示OK,再执行Button1Click则也会出错,出错代码同上。
我的代码应该不会有什么问题吧?为什么一执行查询。再执行删除就会出错呢?

在线等待!
...全文
20 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
XXSingle 2003-09-03
  • 打赏
  • 举报
回复
把Query改成其它名称。。。不能用对像名命名吧,很容易出错
在Clear之前要加qry.close
PrettyMurphy 2003-09-03
  • 打赏
  • 举报
回复
搞定了。总结一下:

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Insert into BackupPath (ID,BackPath,PathAttrib) Values (:A,:B,:C)');
Query1.Parameters.ParamByName('A').Value:='2';
Query1.Parameters.ParamByName('B').Value:='D:\';
Query1.Parameters.ParamByName('C').Value:='ABC';
Query1.ExecSQL;

还是不明白。原来用的好好的SQL语句为什么不可以直接插了。 :)
PrettyMurphy 2003-09-03
  • 打赏
  • 举报
回复
呀,我都快疯掉了。昨天不行的。今天一运行竟然全OK

我都不知道哪来的毛病。那要是以后老是这样突然来一下不行不是会被害得好惨?

更惨的事还在后头。
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Insert into BackupPath (ID,BackPath,PathAttrib) Values ("1","c:\","1")');
Query1.ExecSQL;

这条插入语句没错吧?竟然报错:“参数不足,期待是2”

怎么回事哦,有哪位大哥帮忙看看罗。
PrettyMurphy 2003-09-03
  • 打赏
  • 举报
回复
用ADO连不用ADOQUERY? 那用什么?

我有CLOSE哇。还是一样。
xiaoli2200 2003-09-02
  • 打赏
  • 举报
回复
up
sailer_shi 2003-09-02
  • 打赏
  • 举报
回复
拜托,你用Ado连,为什么用Query呀,还有每次打开Query(AdoQuery)的时候一定要Close呀
sailer_shi 2003-09-02
  • 打赏
  • 举报
回复
拜托,你用Ado连,为什么用Query呀,还有每次打开Query(AdoQuery)的时候一定要Close呀
PrettyMurphy 2003-09-02
  • 打赏
  • 举报
回复
TO: Drate(小虫)

不行哦。只要查找和删除用的是同一个QUERY就会出问题。不同就不会。

哪位告诉我在哪下ADO 新版本么?
vincege 2003-09-02
  • 打赏
  • 举报
回复
就是没有用close的问题,执行查询后query处于active状态,这个时候是不能修改sql的。
Drate 2003-09-02
  • 打赏
  • 举报
回复
你把对象名query改为query1再试一试
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Delete From BackupPath');
Query1.ExecSQL;
showmessage('ok');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * from BackupPath');
Query1.Open;
showmessage('ok');
end;
PrettyMurphy 2003-09-02
  • 打赏
  • 举报
回复
大哥,去哪升级哇?微软的官方网站?

没哇?我就用了这两个控件哇。

用QUERY.CLOSE不是全关了么?好像我看书上说。QUERY会自已关闭的吧?
PrettyMurphy 2003-09-02
  • 打赏
  • 举报
回复
我用的是DELPHI 7

系统是WIN2000

我用两个ADOQUERY就不会报错了。一个专门查询,一个专门操作。 :)

不会吧?为什么会有这种问题?那位大哥可以告诉我?
delphi_xizhousheng 2003-09-02
  • 打赏
  • 举报
回复
msado15.dll的问题 升级一下ADO UPDATE FOR D6
要执行返回数据集前要确定DATASET是否关闭。
你的BUTTON1 那里要先CLOSE DATASET
PrettyMurphy 2003-09-02
  • 打赏
  • 举报
回复
加了,一样报错。

:)

是不是ADO有问题?
sy_315 2003-09-02
  • 打赏
  • 举报
回复
你分开用两个不同的qurey做做看
deeply 2003-09-02
  • 打赏
  • 举报
回复
你在每句前面加上Query.close试试。

procedure TForm1.Button1Click(Sender: TObject);
begin
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('Delete From BackupPath');
Query.ExecSQL;
showmessage('ok');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('Select * from BackupPath');
Query.Open;
showmessage('ok');
end;
guanghui 2003-09-02
  • 打赏
  • 举报
回复
你加上query.close看看

2,498

社区成员

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

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