Access tablosunda bir işlem gerçekleştirirken "Yeterli disk alanı veya bellek yok" hatası

Not

Office 365 ProPlus, Microsoft 365 Kurumsal Uygulamaları olarak yeniden adlandırılıyor. Bu değişiklik hakkında daha fazla bilgi için, bu blog yazısını okuyun.

Gelişmiş: Uzman kodlama, birlikte çalışabilirlik ve çok kullanıcılı beceriler gerektirir.

Bu makale yalnızca bir Microsoft Access veritabanı (.mdb) için geçerlidir.

Belirtiler

Bir tabloda bir işlem gerçekleştirdiğiniz zaman, işlem çok sayıda sayfa kilidi oluşturuyorsa aşağıdaki hata iletisini alabilirsiniz: Yeterli disk alanı veya bellek yoktur.

Büyük bir tabloda bir eylem sorgusu çalıştırıyorsanız, aşağıdaki hata iletisini alabilirsiniz: Bu eylem sorgusunun yapmak üzere olduğu veri değişikliklerini geri almak için yeterli disk alanı veya bellek yoktur.

Neden

İşlem için gereken sayfa kilitleri, varsayılan olarak 9500 kilitlenen MaxLocksPerFile değerini aşar. MaxLocksPerFilesetting Windows kayıt defterinde depolanır.

Çözüm

Önemli

Bu bölüm, yöntem veya görev, kayıt defterini nasıl değiştireceğinizi söyleyen adımlar içerir. Ancak, kayıt defterini yanlış değiştirirseniz ciddi sorunlar oluşabilir. Bu nedenle, bu adımları dikkatle izlediğinden emin olun. Daha fazla koruma için, değiştirmeden önce kayıt defterini yedekle. Ardından, bir sorun oluşursa kayıt defterini geri yükleyebilirsiniz. Kayıt defterini yedekleme ve geri yükleme hakkında daha fazla bilgi için, makaleyi Microsoft Bilgi Bankası'nda görüntülemek için aşağıdaki makale numarasını tıklatın:

322756 Windows'da kayıt defterinasıl yedeklenir ve geri yüklenir

Bu sorunu aşmanın birkaç yolu vardır:

  • Kayıt defterini değiştirmek ve MaxLocksPerFilevalue'i kalıcı olarak değiştirmek için Regedit.exe'yi kullanabilirsiniz.
  • MaxLocksPerFilevalue'i geçici olarak kod olarak değiştirmek için DBEngine nesnesinin SetOption yöntemini kullanabilirsiniz.
  • Bir eylem sorgusu çalıştırdığınızda hata oluşursa, sorguyu değiştirebilir ve UseTransactionözelliğini Hayır olarak ayarlayabilirsiniz.

Yöntem 1: Kayıt defterinde MaxLocksPerFile değiştirme

Aşağıdaki anahtar altında MaxLocksPerFile değerini artırmak için Kayıt Defteri Düzenleyicisi kullanın:

Microsoft Access 2000 için, Microsoft Access 2002'de ve 32 bit Windows işletim sistemi yle çalışan Microsoft Office Access 2003'te:

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

Microsoft Access 2000 için, Microsoft Access 2002'de ve 64 bit Windows işletim sisteminde çalışan Microsoft Office Access 2003'te:

HKEY_LOCAL_MACHINE\YAZILIM\Wow6432Düğüm\Microsoft\Jet\4.0\Motorlar\Jet 4.0

32 bit Windows işletim sistemi üzerinde çalışan Microsoft Office Access 2007 için:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Bağlantı Altyapısı\Motorlar\ACE

64 bit Windows işletim sistemi üzerinde çalışan Microsoft Office Access 2007 için:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Düğüm\Microsoft\Office\12.0\Access Bağlantı Motoru\Motor\ACE

32 bit Windows işletim sistemi üzerinde çalışan Microsoft Access 2010 için:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Bağlantı Motoru\Motor\ACE

64 bit Windows işletim sistemi üzerinde çalışan Microsoft Office Access 2010 için:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Düğüm\Microsoft\Office\14.0\Access Bağlantı Motoru\Motor\ACE

32 bit Windows işletim sistemi üzerinde çalışan Microsoft Access 2013 için:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Access Bağlantı Altyapısı\Motorlar\ACE

64 bit Windows işletim sistemi üzerinde çalışan Microsoft Office Access 2013 için:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Düğüm\Microsoft\Office\15.0\Access Bağlantı Motoru\Motor\Ace

32 bit Windows işletim sistemi yle çalışan Microsoft Access 2016 için:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Access Bağlantı Altyapısı\Motorlar\ACE

64 bit Windows işletim sistemi üzerinde çalışan Microsoft Office Access 2016 için:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Düğüm\Microsoft\Office\16.0\Access Bağlantı Motoru\Motor\Ace

Bu yöntemin, Microsoft Jet veritabanı altyapısı sürüm 4.0 kullanan tüm uygulamaların kayıt defteri ayarını değiştirdiğini unutmayın.

Yöntem 2: Geçici olarak MaxLocksPerFile değiştirmek için SetOption kullanma

Not

Bu makaledeki örnek kod Microsoft Veri Erişim Nesneleri kullanır. Bu kodun düzgün çalışması için Microsoft DAO 3.6 Nesne Kitaplığı'na başvurmanız gerekir. Bunu yapmak için Visual Basic Düzenleyicisi'ndeki Araçlar menüsünde Başvurular'ı tıklatın ve Microsoft DAO 3.6 Nesne Kitaplığı onay kutusunun seçildiğinden emin olun.

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna zımni garantiler, satılabilirlik veya belirli bir amaca uygunluk da dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler. SetOption yöntemi, kayıt defterindeki Microsoft Jet veritabanı altyapısı anahtarlarının değerlerini geçici olarak geçersiz kılar. Yeni değer, siz yeniden değiştirene veya DBEngine nesnesi kapanana kadar etkin kalır.

Not

SetOption yöntemini kullanarak MaxLocksPerFilesetting yapılan değişiklikler yalnızca Veri Erişim Nesneleri (DAO) geçerli oturumu aracılığıyla kullanılabilir olacaktır. Microsoft Access kullanıcı arabirimi üzerinden çalıştırılabilen sorgular, kayıt defterindeki ayarları kullanmaya devam eder.

Aşağıdaki kod örneği, bir işlem içinde bir güncelleştirme işlemi gerçekleştirmeden önce MaxLocksPerFile'ı 200.000 olarak ayarlar:

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

Yöntem 3: Eylem sorgusunda UseTransaction özelliğini ayarlama

Depolanan bir eylem sorgusu hataya neden olursa, UseTransaction özelliğini Hayır olarak ayarlayabilirsiniz. Bunu yaparsanız, sorgu çalışırken bir sorun veya bir hata varsa değişikliklerinizi geri alamayacağınızı unutmayın:

  1. Sorguyu Tasarım görünümünde açın.
  2. Görünüm menüsünde Özellikler'i tıklatın.
  3. Sorgu Özellikleri iletişim kutusunu görüntülemek için sorgu penceresinin üst yarısındaboş bir alanı tıklatın.
  4. UseTransactionözelliğini Hayır olarak ayarlayın.
  5. Sorguyu kaydedin ve kapatın.

Daha fazla bilgi

Kayıt defterindeki MaxLocksPerFilesetting, Microsoft Jet veritabanı altyapısındaki işlemlerin belirli bir değeri aşmasını engeller. Bir hareket MaxLocksPerFile değerini aşan kilitler oluşturmaya çalışırsa, işlem iki veya daha fazla parçaya bölünür ve kısmen işlenir.

Sorunu yeniden oluşturma adımları

Aşağıdaki örnek, içinde 10.000 kayıt bulunan bir tablo oluşturmak için Visual Basic yordamı kullanır ve ardından hata iletisine neden olmak için tabloyu değiştirir:

  1. Örnek veritabanı Northwind.mdb açın.
  2. Bir modül oluşturun ve ardından aşağıdaki yordamı yazın:
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. Yordamı çalıştırmak için Hemen penceresine aşağıdaki satırı yazın ve sonra ENTER tuşuna basın:

    CreateBigTable
    

    Yordam, içinde 10.000 kayıt bulunan BigTable adında bir tablo oluşturur.

  2. Modülü Modül1 olarak kaydedin ve kapatın.

  3. Tasarım görünümünde BigTable tablosunu açın.

  4. Field4'ün FieldSize özelliğini 253 olarak değiştirin.

  5. Masayı kurtar. Bazı verilerin kaybolabileceği istendiğinde Evet'i tıklatın.

    Bir süre sonra aşağıdaki hata iletilerini aldığınıza dikkat edin:

    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.