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
Veri Erişim Nesneleri (DAO) LastUpdated özelliği, Microsoft Access formları, raporları, makroları ve modülleri için yanlış tarihler/saatler döndürür.
Neden
Microsoft Access, Microsoft Jet veritabanı altyapısına Access'e özgü nesnelerin (formlar, raporlar, makrolar ve modüller) değiştirilmesi hakkında bildirimde bulunmaz; bu nedenle, MSysObjects tablosundaki DateUpdate sütunu hiçbir zaman doğru tarih ve saate güncelleştirilmez. Aynı davranış, Microsoft Access Veritabanı Altyapısı'nı kullanan Microsoft Access 2007 için de geçerlidir.
Durum
Microsoft, bu makalenin başında listelenen Microsoft ürünlerinde bir sorun olduğunu doğruladı.
Ek Bilgi
DAO tarafından sağlanan LastUpdated özelliği veritabanı altyapısı nesneleri (tablolar, sorgular ve ilişkiler) için doğru tarihi/saati döndürür, ancak Microsoft Access belirli nesneleri (formlar, raporlar, makrolar ve modüller) için son değiştirilen tarihi değil yalnızca oluşturma tarihini döndürür. Microsoft Access 2000'den önce Microsoft Access, hem veritabanı nesnelerini (tablolar, sorgular ve ilişkiler) hem de Microsoft Access'e özgü nesneleri (formlar, raporlar, makrolar ve modüller) depolamak için bir Jet veritabanı (.mdb) dosyası kullanmaktadır. Microsoft Access, belirli nesnelerini Jet sistem tablolarında, özellikle MSysObjects si ve MSysModules (veya MSysModules2) tablolarında depolatmistır. MSysObjects tablosundaki DateUpdate sütunu bir nesnenin son değişiklik tarihini depolamaktan sorumludur ve DAO LastUpdate özelliğinin nesnenin son değiştirilen tarihini döndürmek için kullandığı sütundur. Bir kullanıcı önceki sürümlerde bir nesneyi değiştirip kaydettiğinde, Microsoft Access Jet veritabanı altyapısına nesnenin değiştirildiğini bildirmiş ve Jet DateUpdate sütununa geçerli tarih ve saatolarak güncel olarak güncellenmiştir. Microsoft Access 2000, Jet veritabanı altyapısını kullanmadan doğrudan Microsoft SQL Server veritabanlarına bağlanma özelliğine sahip Access project (.adp) dosyalarını tanıttı. ADP dosyaları Jet veritabanı altyapısını (veya Access Database Engine'i) kullanmadığından, Access, Access'e özgü nesneler için Jet veritabanlarında daha önce kullanılan aynı depolama biçimini kullanamaz. Bu jet veritabanları ve Access projelerinde erişilebilir yeni bir OLE doc depolama biçiminde bunları saklamak zorunda kaldı. Kullanıcı başlangıçta form gibi yeni bir Microsoft Access özel nesnesi oluşturduğunda, veritabanı altyapısı hala geçerli tarih ve saati MSysObjects tablosundaki DateCreate ve DateUpdate sütunlarına girer. Ancak, kullanıcı nesneyi modihece ettiğinde ve kaydettiğinde, Microsoft Access veritabanı altyapısına bildirimde bulunmaz; bu nedenle, DateUpdate sütunu her zaman aynı kalır. Ayrıca, Veritabanı penceresi (Access 2007'den önceki sürümlerde) ve Access 2007 veya Access 2010'daki Gezinti Bölmesi'nin bir nesnenin son değişikliği için doğru tarih ve saati görüntülediğini fark etmiş olabilirsiniz. Bunun nedeni, Microsoft Access'in veritabanı altyapısından bağımsız olarak oluşturulan tarihi ve değiştirilen tarihi depolamak için kendi iç mekanizmasını kullanmasıdır. Ne yazık ki, Microsoft Access bu bilgileri nesne modelinde göstermez; bu nedenle, Microsoft Access'te bu bilgilere ulaşmanın programatik bir yolu yoktur.
Davranışı Çoğaltma Adımları
-
Microsoft Access'i başlatın ve ardından yeni, boş bir veritabanı oluşturun.
-
Tasarım görünümünde yeni, boş bir form oluşturun.
-
Forma bir metin kutusu ekleyin.
-
Formu frmLastUpdatedolarak kaydedin ve kapatın.
-
Access 2003 ve Access'in önceki sürümlerinde Görünüm menüsünü seçin ve Ayrıntılar'ıtıklatın. Access 2007 veya Access 2010'da, soldaki Gezinti Bölmesi'ndeki Kategori başlığına sağ tıklayın ve Ayrıntılara Göre Görüntüle'yitıklatın. Bu, her nesne için Değiştirilen ve Oluşturulan tarihleri görüntüler. FrmLastUpdated formu için değiştirilen ve oluşturulan sütunların aynı tarih ve saate ayarlandığına dikkat edin.
-
Visual Basic Editor'da Hemen pencereyi açmak için CTRL+G tuşuna basın. (Access 2007 veya Access 2010'da, önce içeriği etkinleştirmeniz veya veritabanının güvenilir bir konumda olması gerekir.)
-
Hemen penceresine aşağıdaki satırı yazın ve enter tuşuna basın:
?CurrentDb.Containers("Forms").Documents("frmLastUpdated").LastUpdated
Döndürülen tarih ve saatin Veritabanı penceresindeki Değiştirilen ve Oluşturulan sütunlara karşılık geldiğini unutmayın.
-
Microsoft Access'e geri dönmek için ALT+F11 tuşuna basın.
-
FrmLastUpdated formunu Tasarım görünümünde açın.
-
Forma ikinci bir metin kutusu ekleyin ve sonra kaydedip kapatın. Veritabanı penceresindeki Değiştirilen sütunun form için güncelleştirilmiş bir tarih ve saat içerdiğini unutmayın.
-
7 ve 8 adımlarını tekrarlayın.
NotLastUpdated özelliği, Veritabanı penceresinde değiştirilen sütunda görüntülenen yeni tarih ve saat yerine özgün tarih ve saati yine de döndürür.