使用ADO连接ACCESS,删除数据时总是删错数据,在线等!!!

mujingzhu 2017-12-09 03:03:16
各位大神:

我在使用ADO连接ACCESS数据库时,用了DBGRID显示数据,想要点击DBGrid1中的某一行,点击删除按钮后删除选中的那一行,使用的代码如下:
procedure TForm1.btn4Click(Sender: TObject);
begin
with qry1 do
begin
close;
Active:=True;
Edit;
Delete;
Update;
end;
end;
但在实际操作中时,不管我选中的哪一行,它删掉的数据总是第一行数据
...全文
2663 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
东南西北风 2018-02-27
  • 打赏
  • 举报
回复
with qry1 do begin close; 把qry1关闭了 Active:=True; Edit; Delete; 这里删除的不是你选中的那条记录了,数据集打开时,默认是第一条。 Update; end;
秋天之落叶 2018-02-06
  • 打赏
  • 举报
回复
基本都是问完就跑,哇哈哈哈
leeky 2018-02-06
  • 打赏
  • 举报
回复
年关了,楼主该结帖了。
cqzjb 2018-01-25
  • 打赏
  • 举报
回复
选中某行,直接delete,哪里还需要close,active
Mars 2018-01-11
  • 打赏
  • 举报
回复
删除某一行,必须加where条件判定啊,这样能删除是不对地。像 with qry1 do delete;是错误的
lyhoo163 2018-01-09
  • 打赏
  • 举报
回复
引用 2 楼 lyhoo163 的回复:
你使用close,数据当前行就进入第一行了,再Delete删除当前行,就删除了第一行。 建议代码: procedure TForm1.btn4Click(Sender: TObject); begin with qry1 do begin Delete; end; end;
这样就可以了。。。。
yunzm_wang 2018-01-09
  • 打赏
  • 举报
回复
close; Active:=True; 表示先关闭,再打开,所以一直是第一条,你可以打开sql monitor跟踪一下语句。
zyxgd 2018-01-04
  • 打赏
  • 举报
回复
这3行都是多余的,close是错删数据的根本原因: close; Active:=True; Edit;
xiaocongzhi 2017-12-12
  • 打赏
  • 举报
回复
当你Close再Active 游标自动定位在第一条了
lyhoo163 2017-12-10
  • 打赏
  • 举报
回复
你使用close,数据当前行就进入第一行了,再Delete删除当前行,就删除了第一行。 建议代码: procedure TForm1.btn4Click(Sender: TObject); begin with qry1 do begin Delete; end; end;
日月路明 2017-12-10
  • 打赏
  • 举报
回复
if not qry1.IsEmpty then qry1.delete;
doloopcn 2017-12-09
  • 打赏
  • 举报
回复
按照你的代码,连接哪一种数据库都是删除第一行 不用CLOSE,直接DELETE就可以了 if Notqry.Eof then qry.DELETE; 这样就可以了

2,497

社区成员

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

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