首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC ADO 編程:Delete(adAffectCurrent) 參數含義詳解

     編輯:程式設計疑難解答

直接回答

m_pRecordset->Delete(adAffectCurrent); 中的 adAffectCurrent 表示「僅刪除當前記錄指針所指向的那一條記錄」。

參數枚舉值對照 (ADO 源碼)

enum AffectEnum {
    adAffectCurrent = 1,  // 當前記錄 (默認)
    adAffectGroup   = 2,  // 滿足 Filter 過濾條件的記錄組
    adAffectAll     = 3,  // 所有記錄 (含隱藏/過濾)
    adAffectAllChapters = 4 // 所有章節 (分層記錄集)
};

行為細節

  • 執行後記錄指針移動: 刪除成功後,記錄指針**移動到下一條記錄** (若刪除的是最後一條,則移動到前一條,BOF 為真)。
  • 刪除標記: 記錄被標記為「已刪除」,在事務提交或 UpdateBatch 前仍可撤銷 (CancelUpdate/RollbackTrans)。
  • 即時模式 vs 批量模式:
    • 即時模式 (adLockOptimistic/adLockPessimistic):立即發送 DELETE SQL 到數據庫。
    • 批量模式 (adLockBatchOptimistic):本地標記刪除,需調用 UpdateBatch(adAffectCurrent) 提交。

常見使用模式

try {
    // 定位到要刪除的記錄 (如通過 Find、Move、Bookmark)
    m_pRecordset->Find("ID = 100"); 
    
    if (!m_pRecordset->adoEOF) {
        // 確認刪除 (可選)
        if (AfxMessageBox(_T("確定刪除?"), MB_YESNO) == IDYES) {
            m_pRecordset->Delete(adAffectCurrent); // 刪除當前記錄
            // 即時模式下已提交數據庫
        }
    }
} catch (_com_error& e) {
    // 錯誤處理
    dump_com_error(e);
}

對比:adAffectGroup / adAffectAll

參數效果典型場景
adAffectCurrent刪除**當前**一條記錄用戶選中列表某行點「刪除」
adAffectGroup刪除**滿足 Filter** 的所有記錄批量刪除「狀態=失效」的記錄
adAffectAll刪除**記錄集內所有**記錄 (忽略 Filter)清空臨時表、重置數據

注意事項

  • 刪除後**立即檢查 adoEOF/BOF**,避免後續操作訪問無效記錄。
  • 批量模式下必須成對使用:Delete(adAffectCurrent) + UpdateBatch(adAffectCurrent)。
  • 若無當前記錄 (BOF/EOF 為真),調用 Delete 會拋出錯誤。

總結

adAffectCurrent = 僅影響當前記錄。 它是 Delete、UpdateBatch、CancelBatch 等方法的標準參數,明確限定操作範圍為「游標當前指向的單條記錄」,是最常用、最安全的默認選項。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved