如何警告用户(使用确认对话框)他要执行的查询是否会删除多条记录?
' DELETE FROM ... WHERE ...'可以包含一个或多个记录,所以我想知道如何警告用户他将删除多个记录。
答案 0 :(得分:1)
听起来你在问如何提示用户......
case MessageDlg('Are you sure you wish to delete multiple records?', mtWarning, [mbYes, mbNo], 0) of
mrYes: begin
//Continue
DoWhatNeedsToBeDoneToDeleteMultipleRecords;
end;
mrNo: begin
//Don't continue
end;
end;
例如,您可以......
if ADOQuery1.RecordCount > 1 then begin
PromptToDeleteMultipleRecords;
end;
总而言之,你的代码可能看起来像......
if ADOQuery1.RecordCount > 1 then begin
case MessageDlg('Are you sure you wish to delete multiple records?', mtWarning, [mbYes, mbNo], 0) of
mrYes: begin
//Continue
DoWhateverNeedsToBeDoneToDeleteMultipleRecords;
end;
mrNo: begin
//Don't continue
end;
end;
end;
答案 1 :(得分:1)
这是为了解决你的“为什么这不起作用:程序TDataModule.MYTABLEBeforeDelete(DataSet:TDataSet)”?你评论中的问题,不是@JerryDodge给你的答案的替代品。问这样的问题,你需要解释与你的期望有什么不同的事情。
不要在BeforeDelete事件中尝试删除。在操作开始之前进行,例如如下所示(CDS1是我的数据集的名称)。
顺便说一句,如果您确实想要中断数据集操作,请调用Abort。
procedure TForm1.Button3Click(Sender: TObject);
var
Res : Integer;
begin
if CDS1.RecordCount < 1 then exit;
if CDS1.RecordCount > 1 then begin
Res := MessageDlg(Format('You are about to delete %d records. Proceed?',
[CDS1.RecordCount]),
mtConfirmation,
[mbYes, mbNo],
0);
if Res = mrYes then begin
CDS1.First;
while not CDS1.Eof do begin
CDS1.Delete;
end;
end;
end
else begin
CDS1.Delete;
end;
end;
答案 2 :(得分:0)
有两种方法可以做到这一点;
方式;删除前获取记录计数;
query.close;
query.sql.text := ' Select Count(*) as recCount From Table Where tableId > 15 ';
query.open;
if messagedialog(query.fieldbyname('recCount').asstring + ' record will be deleted! Continue?', mtConfirmation, mbyesno, 0) = mrYes then
Begin
query.close;
query.sql.text := ' Delete From Table Where tableId > 15 ';
query.execsql;
end;
方式;如果您使用的数据库支持
,请使用transectionsquery.connection.BeginTrans;
query.sql.text := ' Delete From Table Where tableId > 15 ';
i := query.execsql;
if messagedialog(inttostr(i) + ' record will be deleted! Continue?', mtConfirmation, mbyesno, 0) = mrYes then
query.connection.CommitTrans
else
query.connection.RollbackTrans;
首先,请记住,如果用户在消息出现后等待很长时间,如果多个用户正在使用该数据库,则可能会更改总记录数。
我在这台电脑上没有Delphi,因此可能存在语法错误。