Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

經典 ASP + Access 「檔案已在使用中」 (0x80004005) 完整排查與三大解決方案

編輯:關於伺服器

錯誤完整資訊


錯誤類型:
Microsoft JET Database Engine (0x80004005)
不能使用 '';檔案已在使用中。

排查前置:關閉友善錯誤訊息

在連線字串檔案 (如 conn.asp) 中,找到 On Error Resume Next,前加單引號註解:'On Error Resume Next,重新整理頁面以獲取真實錯誤行號與描述。

三大核心原因與解決方案

原因一:IIS 匿名使用者對資料庫資料夾無寫入權限 (最常見,~70%)

機制:Access 資料庫連線時會在同目錄建立 .ldb 鎖定檔,需寫入權限。

解決步驟

  1. 找到存放 .mdb 檔案的資料夾 (如 D:\Web\Data\)
  2. 右鍵 → 內容 → 安全性 → 編輯 → 新增
  3. 輸入 IUSR_機器名 (IIS 6.0 匿名帳號) 或 IIS_IUSRS (IIS 7+ 群組) → 確定
  4. 勾選允許:**寫入**、**讀取和執行**、**列出資料夾內容**、**讀取**
  5. 套用到「此資料夾、子資料夾和檔案」→ 確定

⚠ 權限原則:唯有資料庫資料夾給寫入,網站程式碼資料夾**嚴禁給寫入** (防止木馬上傳寫入程式碼)。

原因二:資料庫檔案被其他程序獨佔開啟 (~20%)

場景:管理員用 Access 直接開啟 .mdb、備份軟體鎖定、防毒掃描、其他使用者正在操作。

解決步驟

  1. 關閉所有可能開啟該 .mdb 的程式 (Access、Excel、備份工具等)
  2. 下載 .mdb 到本機 → Access 開啟 → 「資料庫工具」→ **「壓縮與修復資料庫」**
  3. 修復後上傳覆蓋 (建議改檔名如 db_new.mdb 並更新連線字串)
  4. 若頻發生,檢查是否有排程任務/備份軟體在尖峰期鎖定檔案

原因三:資料庫損毀/鎖定檔殘留 (~10%)

現象:資料夾中殘留 .ldb 檔案 (正常斷開連線會自動刪除)

解決步驟

  1. 確認無任何程式存取資料庫
  2. 手動刪除 .ldb 檔案
  3. 執行「壓縮與修復」
  4. 若仍失效,嘗試 JetComp.exe (JET 修復工具) 或第三方 Access 修復工具

進階預防與最佳實踐

措施說明
遷移至 SQL Server Express / SQLiteAccess 非多使用者高併發設計,生產環境強烈建議遷移
連線字串使用 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 徹底根治。

Copyright © Windows教程網 All Rights Reserved