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

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 işlem gerçekleştirdiğinizde, işlem çok sayıda sayfa kilidi oluşturursa şu hata iletisini alabilirsiniz: Yeterli disk alanı veya bellek yok.

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

Neden

İşlem için gereken sayfa kilitleri, varsayılan olarak 9500 kilit olan MaxLocksPerFile değerini aşıyor. 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ğinizin anlatıldığı adımları içermektedir. Ancak kayıt defterini hatalı biçimde değiştirirseniz önemli sorunlar oluşabilir. Bu nedenle bu adımları dikkatle uyguladığınızdan emin olun. Ek koruma için kayıt defterini değiştirmeden önce yedeklemeyi unutmayın. Böylece, bir sorun oluşursa kayıt defterini daha sonra geri yükleyebilirsiniz. Kayıt defterini yedekleme ve geri yükleme hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

322756 Windows'ta kayıt defterini yedekleme ve geri yükleme

Bu sorunu geçici olarak çözmenin birkaç yolu vardır:

  • kayıt defterini düzenlemek ve MaxLocksPerFilevalue değerini kalıcı olarak değiştirmek için Regedit.exe kullanabilirsiniz.
  • Kodda MaxLocksPerFilevalue değerini geçici olarak değiştirmek için DBEngine nesnesinin SetOptionmethod değerini kullanabilirsiniz.
  • Bir eylem sorgusu çalıştırdığınızda hata oluşursa, sorguyu değiştirebilir ve UseTransactionproperty değerini Hayır olarak ayarlayabilirsiniz.

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

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

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

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

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

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

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

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

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

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

32 bit Windows işletim sisteminde çalışan Microsoft Access 2010 için:

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

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

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

32 bit Windows işletim sisteminde çalışan Microsoft Access 2013 için:

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

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

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

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

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

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

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

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

Yöntem 2: MaxLocksPerFile dosyasını geçici olarak değiştirmek için SetOption kullanma

Not

Bu makaledeki örnek kodda Microsoft Veri Erişim Nesneleri kullanılmaktadı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üzenleyici Araçlar menüsünde Başvurular'a tıklayın ve Microsoft DAO 3.6 Nesne Kitaplığı onay kutusunun seçili olduğundan 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. SetOptionmethod, kayıt defterindeki Microsoft Jet veritabanı altyapısı anahtarları için değerleri geçici olarak geçersiz kılar. Yeni değer siz değiştirene kadar veya DBEngine nesnesi kapatılana kadar etkin kalır.

Not

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

Aşağıdaki kod örneği, bir işlem içinde güncelleştirme işlemi yürütmeden önce MaxLocksPerFile değerini 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 eylem sorgusu hataya neden oluyorsa UseTransaction özelliğini Hayır olarak ayarlayabilirsiniz. Bunu yaparsanız, sorgu çalışırken bir sorun veya hata varsa değişikliklerinizi geri alamazsınız:

  1. Sorguyu Tasarım görünümünde açın.
  2. Görünüm menüsünde Özellikler'e tıklayın.
  3. Sorgu Özellikleri iletişim kutusunu görüntülemek için sorgu penceresinin üst yarısında boş bir alana tıklayın.
  4. UseTransactionproperty değerini 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 belirtilen değeri aşmasını önler. Bir işlem 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ını 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 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, Anlık penceresine aşağıdaki satırı yazın ve ENTER tuşuna basın:

    CreateBigTable
    

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

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

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

  4. Field4'ün FieldSizeproperty'sini 253 olarak değiştirin.

  5. Tabloyu kaydedin. Bazı verilerin kaybolabileceği sorulduğunda Evet'e tıklayın.

    Bir süre sonra aşağıdaki hata iletilerini aldığınızı unutmayın:

    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.