delphi语句有问题 请教高手

mingminglingling 2006-06-01 01:13:31
procedure Tczyglfm.xgeditClick(Sender: TObject);
begin
if xmedit.Text='' then
begin
showmessage('姓名不能为空!');
exit;
end;
try
with adoquery do
begin
close;
sql.Clear;
sql.Add('update czyb set 权限=:qx,密码=:mm where 姓名=:xm');
Parameters.ParamByName('xm').Value:=trim(xmedit.Text);
Parameters.ParamByName('qx').Value:=trim(qxbox.Text);
Parameters.ParamByName('mm').Value:=trim(mmedit.Text);
execsql;
showmessage('修改成功!');
xmedit.Text:='';
mmedit.Text:='';
qxbox.Text:='';
end;
except
showmessage('修改失败!');
end;
with adoquery do
begin
close;
sql.Clear;
sql.Add('select * from czyb');
open;
end;
end;

这样删除的时候即使是数据库里面没有的纪录也会显示删除成功 怎样改才能查询完后显示该数据库中不存在这条纪录 请教高手!!!!!!!!!!!! 谢谢
...全文
85 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wudi_1982 2006-06-01
  • 打赏
  • 举报
回复
如果执行execsql返回的是0,就证明没有一条删除成功,它代表你的sql语句影响了N行。ADO中的Recordset是与查询所返回的信息性消息“影响N行”相对应的。

你的代码,可以这么写
procedure Tczyglfm.xgeditClick(Sender: TObject);
begin
if xmedit.Text='' then
begin
showmessage('姓名不能为空!');
exit;
end;
try
with adoquery do
begin
close;
sql.Clear;
sql.Add('update czyb set 权限=:qx,密码=:mm where 姓名=:xm');
Parameters.ParamByName('xm').Value:=trim(xmedit.Text);
Parameters.ParamByName('qx').Value:=trim(qxbox.Text);
Parameters.ParamByName('mm').Value:=trim(mmedit.Text);

if execsql <> 0 then;
showmessage('修改成功!')
else begin
showmessage('没有目标信息');
exit;
end;
xmedit.Text:='';
mmedit.Text:='';
qxbox.Text:='';
end;
except
showmessage('修改失败!');
end;
with adoquery do
begin
close;
sql.Clear;
sql.Add('select * from czyb');
open;
end;
end;
骑牛上铂金 2006-06-01
  • 打赏
  • 举报
回复
用UPDTAE语句只要不出现语法错误,都会执行成功,也就会出现提示修改成功,
你可以在修改前检查一下数据表中是否存在符合条件的记录
可在try 后面加上下面的语句,
with adoquery do
begin
close;
sql.Clear;
sql.Add('select * from czyb where 姓名=:xm');
Parameters.ParamByName('xm').Value:=trim(xmedit.Text);
open;
if recordcount=0 then
begin
showmessage('不存在符合此条件的记录!');
exit;
end;
close;
end;
with adoquery1 do
begin
……
wudi_1982 2006-06-01
  • 打赏
  • 举报
回复
with ADOQuery1 do
begin
close;
Parameters.ParamByName('#psswd').Value := 'abc';
showmessage(Format('共有%d条记录修改成功',[ExecSQL]));
end;
liangyong007a 2006-06-01
  • 打赏
  • 举报
回复
没法下手
andyzhou1101 2006-06-01
  • 打赏
  • 举报
回复
你应该先判断你要更新的记录是不是在数据库里
飞哥 2006-06-01
  • 打赏
  • 举报
回复
如果要删除,就在删除之前进行一次查询
其实只要是修改的(查询不是)都要查一下的

懂我意思了吧
比如用adoquery
就先执行一次查询
判断存不存在

然后再执行那个删除
wudi_1982 2006-06-01
  • 打赏
  • 举报
回复
ExecSQL returns an integer value reflecting the number of rows affected by the executed SQL statement.
function ExecSQL: Integer;

根据execsql返回的参数判断
飞哥 2006-06-01
  • 打赏
  • 举报
回复
请问你删除的部分呢?

2,507

社区成员

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

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