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:
- Sorguyu Tasarım görünümünde açın.
- Görünüm menüsünde Özellikler'i tıklatın.
- Sorgu Özellikleri iletişim kutusunu görüntülemek için sorgu penceresinin üst yarısındaboş bir alanı tıklatın.
- UseTransactionözelliğini Hayır olarak ayarlayın.
- 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:
- Örnek veritabanı Northwind.mdb açın.
- 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
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.
Modülü Modül1 olarak kaydedin ve kapatın.
Tasarım görünümünde BigTable tablosunu açın.
Field4'ün FieldSize özelliğini 253 olarak değiştirin.
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.