首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

DAO 實戰:刪除資料表、批次刪除記錄與自動編號重置技巧

     編輯:關於.NET

基本操作:刪除資料表

CurrentDb.Execute "DROP TABLE [TableName]"

批次刪除指定記錄

strSql = "DELETE * FROM [TableName] WHERE [lngNodeId] <> 1"
CurrentDb.Execute strSql

棘手問題:自動編號不會自動重置

Access 的 AutoNumber 欄位在刪除記錄後**不會回收號碼**。例如:

  1. 原有 10001 筆記錄
  2. 刪除最後 10000 筆,剩 1 筆 (ID=1)
  3. 新增第 2 筆 → ID 變成 **10002** (而非 2)

解決方案:重建資料表法

核心邏輯:複製結構與資料 → 刪除舊表 → 重建同名表 → 複製回資料,即可清除自動編號記憶。

完整程式碼範例

' 1. 將需保留的資料複製到暫存表 (同時移除自動編號記憶)
strSql = "SELECT tblTestTree2.* INTO [tblTmp] FROM [OldTable] WHERE [lngNodeId] = 1"
CurrentDb.Execute strSql

' 2. 刪除原資料表
CurrentDb.Execute "DROP TABLE [OldTable]"

' 3. 從暫存表重建同名資料表
strSql = "SELECT * INTO [OldTable] FROM [tblTmp]"
CurrentDb.Execute strSql

' 4. 清理暫存表
CurrentDb.Execute "DROP TABLE [tblTmp]"

原理深度解析

  • SELECT ... INTO [NewTable] 會建立**新資料表**,自動編號欄位重新計算種子值。
  • DROP TABLE 徹底移除舊表結構與中繼資料(含自動編號計數器)。
  • 重建後插入資料,Access 會從 1 開始重新編號。

替代方案比較

方法優點缺點適用場景
重建資料表 (本文)徹底重置、無需壓縮修復需處理關聯、索引、權限重建開發期、資料量中小、結構簡單
壓縮與修復資料庫一次清理所有表自動編號需獨佔資料庫、耗時、風險較高維護期、整庫優化
ALTER TABLE ALTER COLUMN COUNTER(1,1)語法簡單 (ACE/Jet 4.0+)需資料庫獨佔、不支援 MDB 早期版本單表快速重置、支援 SQL 執行

注意事項

  1. 外鍵關聯:重建表前需刪除 FK,重建後再加回。
  2. 索引/主鍵:SELECT INTO 不複製索引,需額外 CREATE INDEX。
  3. 權限:重建表會遺失原有權限設定,需重新授權。
  4. 交易處理:建議包在 Transaction 中,失敗可回滾。

結語

DAO 操作 Access 時,自動編號重置是常見痛點。「複製→刪除→重建」雖顯笨拙,卻是最穩健、相容性最佳的方案。搭配適當的錯誤處理與交易控制,即可在應用程式中優雅解決此問題。

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