Bagikan melalui


Kesalahan "Ruang disk atau memori tidak cukup" saat Anda melakukan operasi pada tabel Access

Tingkat Lanjut: Membutuhkan keterampilan pengkodian pakar, interoperabilitas, dan multipengguna.

Artikel ini hanya berlaku untuk database Microsoft Access (.mdb).

Gejala

Saat Anda melakukan operasi pada tabel, Anda mungkin menerima pesan kesalahan berikut jika operasi membuat sejumlah besar kunci halaman: Ruang disk atau memori tidak cukup.

Jika Anda menjalankan kueri tindakan pada tabel besar, Anda mungkin menerima pesan kesalahan berikut: Ruang disk atau memori tidak cukup untuk mengurungkan perubahan data yang akan dilakukan kueri tindakan ini.

Penyebab

Kunci halaman yang diperlukan untuk transaksi melebihi nilai MaxLocksPerFile, yang defaultnya adalah 9500 kunci. MaxLocksPerFilesetting disimpan di registri Windows.

Resolusi

Penting

Bagian, metode, atau tugas ini berisi langkah-langkah yang memberi tahu Anda cara mengubah registri. Namun, masalah serius mungkin terjadi jika Anda salah memodifikasi registri. Oleh karena itu, pastikan Anda mengikuti langkah-langkah ini dengan hati-hati. Untuk perlindungan tambahan, buat cadangan registri sebelum Anda mengubahnya. Kemudian, Anda dapat memulihkan registri jika terjadi masalah. Untuk informasi selengkapnya tentang cara mencadangkan dan memulihkan registri, lihat Cara mencadangkan dan memulihkan registri di Windows.

Ada beberapa cara untuk mengatasi masalah ini:

  • Anda dapat menggunakan Regedit.exe untuk mengedit registri dan mengubah MaxLocksPerFilevalue secara permanen.
  • Anda dapat menggunakan SetOptionmethod objek DBEngine untuk mengubah MaxLocksPerFilevalue untuk sementara dalam kode.
  • Jika kesalahan terjadi saat Anda menjalankan kueri tindakan, Anda dapat mengubah kueri dan mengatur UseTransactionproperty ke Tidak.

Metode 1: Mengubah MaxLocksPerFile di registri

Gunakan Editor Registri untuk meningkatkan nilai MaxLocksPerFile di bawah kunci berikut:

Untuk Microsoft Access 2000, di Microsoft Access 2002, dan di Microsoft Office Access 2003 yang berjalan pada sistem operasi Windows 32-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0

Untuk Microsoft Access 2000, di Microsoft Access 2002, dan di Microsoft Office Access 2003 yang berjalan pada sistem operasi Windows 64-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Jet 4.0

Untuk Microsoft Office Access 2007 yang berjalan pada sistem operasi Windows 32-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\ACE

Untuk Microsoft Office Access 2007 yang berjalan pada sistem operasi Windows 64-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\ACE

Untuk Microsoft Access 2010 yang berjalan pada sistem operasi Windows 32-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\ACE

Untuk Microsoft Office Access 2010 yang berjalan pada sistem operasi Windows 64-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\ACE

Untuk Microsoft Access 2013 yang berjalan pada sistem operasi Windows 32-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Access Connectivity Engine\Engines\ACE

Untuk Microsoft Office Access 2013 yang berjalan pada sistem operasi Windows 64-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Access Connectivity Engine\Engines\ACE

Untuk Microsoft Access 2016 yang berjalan pada sistem operasi Windows 32-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ACE

Untuk Microsoft Office Access 2016 yang berjalan pada sistem operasi Windows 64-bit:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Access Connectivity Engine\Engines\ACE

Perhatikan bahwa metode ini mengubah pengaturan registri untuk semua aplikasi yang menggunakan mesin database Microsoft Jet versi 4.0.

Metode 2: Menggunakan SetOption untuk mengubah MaxLocksPerFile Untuk Sementara

Nota

Kode sampel dalam artikel ini menggunakan Objek Akses Data Microsoft. Agar kode ini berjalan dengan benar, Anda harus mereferensikan Pustaka Objek Microsoft DAO 3.6. Untuk melakukannya, pilih Referensi pada menu Alat di Visual Basic Editor, dan pastikan bahwa kotak centang Pustaka Objek Microsoft DAO 3.6 dipilih.

Microsoft menyediakan contoh pemrograman hanya untuk ilustrasi, tanpa jaminan yang dinyatakan atau tersirat. Ini termasuk, tetapi tidak terbatas pada, jaminan tersirat dari kelayakan untuk diperdagangkan atau kesesuaian untuk tujuan tertentu. Artikel ini mengasumsikan bahwa Anda terbiasa dengan bahasa pemrograman yang ditunjukkan dan dengan alat yang digunakan untuk membuat dan men-debug prosedur. Teknisi dukungan Microsoft dapat membantu menjelaskan fungsionalitas prosedur tertentu, tetapi mereka tidak akan memodifikasi contoh-contoh ini untuk menyediakan fungsionalitas tambahan atau prosedur konstruksi untuk memenuhi persyaratan spesifik Anda. Metode ini SetOption untuk sementara mengambil alih nilai untuk kunci mesin database Microsoft Jet di registri. Nilai baru tetap berlaku sampai Anda mengubahnya lagi, atau sampai objek DBEngine ditutup.

Nota

Perubahan yang dilakukan pada pengaturan MaxLocksPerFile dengan menggunakan metode SetOption ini hanya tersedia melalui sesi saat ini dari Objek Akses Data (DAO). Kueri yang dijalankan melalui antarmuka pengguna Microsoft Access masih menggunakan pengaturan di registri.

Sampel kode berikut menetapkan MaxLocksPerFile ke 200.000 sebelum menjalankan operasi pembaruan di dalam transaksi:

Sub LargeUpdate()
   On Error GoTo LargeUpdate_Error
   Dim db As DAO.Database, ws As DAO.Workspace

' Set MaxLocksPerFile.
   DBEngine.SetOption dbMaxLocksPerFile, 200000

Set db = CurrentDb
   Set ws = Workspaces(0)

' Perform the update.
   ws.BeginTrans
   db.Execute "UPDATE BigTable SET Field1 = 'Updated Field'", _
         dbFailOnError

ws.CommitTrans

db.Close
   MsgBox "Done!"
   Exit Sub

LargeUpdate_Error:
   MsgBox Err & " " & Error
   ws.Rollback
   MsgBox "Operation Failed - Update Canceled"
   End Sub

Metode 3: Mengatur properti UseTransaction dalam kueri tindakan

Jika kueri tindakan tersimpan menyebabkan kesalahan, Anda bisa mengatur propertinya UseTransaction ke Tidak.

Catatan: Jika Anda melakukannya, Anda tidak dapat mengembalikan perubahan jika ada masalah atau kesalahan saat kueri sedang berjalan.

  1. Buka kueri dalam tampilan Desain.
  2. Pada menu Tampilan, pilih Properti.
  3. Pilih ruang kosong di bagian atas jendela kueri untuk menampilkan kotak dialog Properti Kueri.
  4. Atur UseTransactionproperty ke Tidak.
  5. Simpan kueri dan tutup.

Informasi selengkapnya

MaxLocksPerFilesetting dalam registri mencegah transaksi di mesin database Microsoft Jet melebihi nilai yang ditentukan. Jika transaksi mencoba membuat kunci melebihi nilai MaxLocksPerFile, transaksi tersebut akan dibagi menjadi dua atau lebih bagian dan dilakukan sebagian.

Langkah-langkah untuk mengulangi masalah

Contoh berikut menggunakan prosedur Visual Basic untuk membuat tabel dengan 10.000 rekaman di dalamnya, lalu memodifikasi tabel untuk menyebabkan pesan kesalahan:

  1. Buka contoh database Northwind.mdb.
  2. Buat modul, lalu ketik prosedur berikut:
Sub CreateBigTable()
   Dim db As Database, rs As Recordset
   Dim iCounter As Integer, strChar As String
   Set db = CurrentDb
   db.Execute "CREATE TABLE BigTable (ID LONG, Field1 TEXT(255), " & _
     "Field2 TEXT(255), Field3 TEXT(255), Field4 TEXT(255))", _
     dbFailOnError
   Set rs = db.OpenRecordset("BigTable", dbOpenDynaset)
   iCounter = 0
   strChar = String(255, " ")
   While iCounter <= 10000
      rs.AddNew
      rs!ID = iCounter
      rs!Field1 = strChar
      rs!Field2 = strChar
      rs!Field3 = strChar
      rs!Field4 = strChar
      rs.Update
      iCounter = iCounter + 1
   Wend
   MsgBox "Done!"
End Sub

  1. Untuk menjalankan prosedur, ketik baris berikut ini di jendela Segera, lalu tekan ENTER:

    CreateBigTable
    

    Prosedur ini membuat tabel yang disebut BigTable dengan 10.000 rekaman di dalamnya.

  2. Simpan modul sebagai Module1, lalu tutup.

  3. Buka tabel BigTable dalam tampilan Desain.

  4. Ubah FieldSizeproperty dari Field4 menjadi 253.

  5. Simpan tabel ini. Klik Ya saat Anda diminta bahwa beberapa data mungkin hilang.

    Perhatikan bahwa, setelah beberapa saat, Anda menerima pesan kesalahan berikut:

    Microsoft Access can't change the data type.
    There isn't enough disk space or memory.  
    
    Errors were encountered during the save operation. Data types were not changed. Properties were not updated.