帮我看看ADO在ACCESS数据库中删除一个表中记录的错误的原因,就是delete from.....语句,请进。。。。(15分)

  • 主题发起人 主题发起人 hygsxy
  • 开始时间 开始时间
H

hygsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在ACCESS数据库.mdb中删除一个表某条记录。
该数据表的结构是:
工号 年龄 职位
123 25 工人
589 35 干部
都是文本字段。
我想用SQL语句删除某一条记录,但必须满足两个条件才可删除,否则一个条件满足或者都不满足则发生异常。

看我的例子。
begin
try
adoquery1.sql.clear;
adoquery1.sql.add('delete from 数据表 where 工号=:工号 and 年龄=:年龄 ')
parameters.parambyname('工号').value:=edit1.text;
parameters.parambyname('年龄').value:=edit2.text;
execsql;
except
messagebox(handle,'发生异常','警告',mb_ok+mb_iconstop);
exit;
end;
messagebox(handle,'删除成功','提示,mb_ok+mb_iconinformation);
end;
我的代码就这些,运行时:如果两个条件满足,删除没问题,但如果工号,年龄有一个正确,另一个不正确,或者两个都不正确则异常根本扑捉不到,也会出现删除成功的对话框,误导人。但实际表里内容并没有删除。
我的目的就是当两个条件满足时删除,一个满足或者两个都不满足,则产生异常,显示产生异常对话框。

--------------------
是否delphi在采用ADO删除ACCESS某个表里记录时,如果没找到满足条件的记录,本身就不会产生异常,而直接返回。还是,我写的有错误?
 
没有满足条件的也不会产生异常。
要实现类似功能,可能要再写SQL先检测一下是否存在满足条件的记录。
 
条件不满足肯定是不会产生异常的,但你按我这样的改改后,就不会出现条件不满足也会出现'删除成功'的提示了.
begin
try
adoquery1.sql.clear;
adoquery1.sql.add('delete from 数据表 where 工号=:工号 and 年龄=:年龄 ')
parameters.parambyname('工号').value:=edit1.text;
parameters.parambyname('年龄').value:=edit2.text;
execsql;
messagebox(handle,'删除成功','提示,mb_ok+mb_iconinformation);
except
messagebox(handle,'发生异常','警告',mb_ok+mb_iconstop);
exit;
end;
end;
 
出现异常是因为语句出错才会出现.
你那个查询语句没有错当然可以执行了,
 
没有满足的条件肯定不会产生异常呀!!! 你为什么认为应该产生呢. 奇怪.

ExecSQL 会返回此次执行sql 所影响到的行, 你可以通过这个来判断是否删除成功.
当然, 如果你愿意, 你也可以先select 一下, 判断是否存在,再删除
 
if adoquery1.execsql > 0 then
begin
showmessage('删除成功');
exit;
end;
 
----->loadymf,我问你如果你要删除一个表里根本没有的记录,是否会产生异常?
我遇到的情况不管记录是否存在你删除都不会产生异常,也就是说你可以删除表里根本没有的记录。
 
---------->jianguobu,
你放在前面和后面有区别么?不都一回事情。每次都会出现删除成功对话框。
 
----------->:wnjer,
关注。
 
execsql;
后加一句用于判断就可以了。如:
if adoquery1.execsql > 0 then
begin
showmessage('删除成功');
exit;
end;
 
在adoquery1.sql.clear;前加上一句:
adoquery1.close;
在执行(用ADOQUERY)一条完整的SQL语句时,一定要先CLOSE.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部