錯誤類型:
Microsoft JET Database Engine (0x80004005)
不能使用 '';檔案已在使用中。
在連線字串檔案 (如 conn.asp) 中,找到 On Error Resume Next,前加單引號註解:'On Error Resume Next,重新整理頁面以獲取真實錯誤行號與描述。
機制:Access 資料庫連線時會在同目錄建立 .ldb 鎖定檔,需寫入權限。
.mdb 檔案的資料夾 (如 D:\Web\Data\)IUSR_機器名 (IIS 6.0 匿名帳號) 或 IIS_IUSRS (IIS 7+ 群組) → 確定⚠ 權限原則:唯有資料庫資料夾給寫入,網站程式碼資料夾**嚴禁給寫入** (防止木馬上傳寫入程式碼)。
場景:管理員用 Access 直接開啟 .mdb、備份軟體鎖定、防毒掃描、其他使用者正在操作。
db_new.mdb 並更新連線字串)現象:資料夾中殘留 .ldb 檔案 (正常斷開連線會自動刪除)
.ldb 檔案JetComp.exe (JET 修復工具) 或第三方 Access 修復工具| 措施 | 說明 |
|---|---|
| 遷移至 SQL Server Express / SQLite | Access 非多使用者高併發設計,生產環境強烈建議遷移 |
| 連線字串使用 Shared Async 模式 | Mode=Share Deny None 減少鎖定衝突 (需測試相容性) |
| 應用層連線池/快取 | 減少頻繁開關連線,降低 .ldb 建立/刪除頻率 |
| 定期自動壓縮修復 | 排程腳本每日凌晨執行壓縮修復,維持檔案健康 |
| 監控 .ldb 殘留 | 腳本偵測超過 1 小時未清理的 .ldb 發出告警 |
出現 0x80004005 "檔案已在使用中"
↓
檢查資料夾權限 → IUSR_/IIS_IUSRS 有寫入權限?
├─ 否 → 加入寫入權限 → 測試 → 解決 ✅
└─ 是
↓
檢查 .ldb 檔案是否存在/殘留?
├─ 是 → 刪除 .ldb + 壓縮修復 → 測試 → 解決 ✅
└─ 否
↓
檢查是否有其他程式開啟 .mdb (Access/備份/防毒)?
├─ 是 → 關閉程式/調整排程 → 測試 → 解決 ✅
└─ 否
↓
資料庫損毀 → 完整修復/遷移至 SQL Server → 解決 ✅
經典總結:ASP + Access 「檔案已在使用中」,**90% 是資料夾寫入權限缺失**。剩下 10% 為鎖定檔殘留、佔用衝突、檔案損毀。權限設定一次永勞永逸,遷移 SQL Server 徹底根治。