如何警告用戶(帶有確認對話框)他要執行的查詢會刪除多條記錄?查詢執行:警告用戶是否要刪除多個記錄
'DELETE FROM ... WHERE ...'可以包含一個或多個記錄,所以我想知道如何警告用戶他將刪除多個記錄。
如何警告用戶(帶有確認對話框)他要執行的查詢會刪除多條記錄?查詢執行:警告用戶是否要刪除多個記錄
'DELETE FROM ... WHERE ...'可以包含一個或多個記錄,所以我想知道如何警告用戶他將刪除多個記錄。
這聽起來像你問如何提示用戶...
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;
上面的代碼不告訴用戶是否有一個或多個記錄。一個記錄 - 它的好。但是,如果它的倍數,那麼警告。 – user3181689
@ user3181689好吧,你還沒有告訴我們足夠的信息來知道你真正期待什麼。什麼類型的數據庫?你使用什麼數據庫?什麼驅動?我們可以看到一些代碼來理解你想要做什麼嗎? –
我想警告用戶該查詢即將刪除多個記錄。如果查詢可以首先對待我要刪除的記錄進行計數,但這是可選的,那將會很不錯...希望首先學習基本知識。 – user3181689
這是解決你的「這是爲什麼不工作:程序TDataModule.MYTABLEBeforeDelete(DataSe t: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;
有兩種方法可以做到這一點;
way;刪除前獲取記錄數;
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;
way;使用橫斷如果您所使用的數據庫支持
query.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;
對於第一種方式,請記住,如果用戶等待很長一段時間後會出現消息,如果數據庫被多個用戶使用的總記錄數可能會改變。
我沒有德爾福在這臺電腦上,所以可能會出現語法錯誤。
您將進程封裝在單個用戶操作中並將該操作包裝在提示中。這是非常平凡的編程習慣。我們不知道「多個記錄」究竟意味着什麼 - 有無數的方法可以識別這些信息。 –
我所要求的是告訴用戶刪除的記錄將不止一個。 – user3181689
你的問題很糟糕。你問如何警告用戶。但是你要問的是如何找到有多少條記錄被刪除。所以你可以在查詢中加入這個'SELECT @@ DELETED',然後從你的查詢中讀取這個值。當然,我們不知道您使用的是什麼SQL風格,它是如何被打包的等等。如果用戶不想刪除,請回滾。 –