m
va
dil
i.c o
HACETTEPE ÜNİVERSİTESİ
ww w. ja
MÜHENDİSLİK FAKÜLTESİ
BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ
BİL 447 YAZILIM MÜHENDİSLİĞİ LABORATUARI
ÖĞRENCİNİN
Adı Soyadı:
Hasan ÇİL
Numarası:
20122048
Öğrenim Yılı:
2004-2005 Güz Dönemi
Ödevinin Konusu:
VERİ ERİŞİM NESNELERİ (DAO)
İÇİNDEKİLER
ww w. ja
va 1
2 3 4 4 4 4 4 4 5 5 5 5 6 6 6 6 7 7 8 8 9 9 10 10 10 11 11 11 11 12 12 12 13 13 14 14
m
dil
i.c o
DAO’NUN KISA TARİHÇESİ VERİ ERİŞİM NESNELERİ (DAO) Veritabanı Motoru (DBEngine) Hatalar (Errors) Çalışma Alanları (Workspaces) Kullanıcılar (Users) Gruplar (Groups) Veritabanları (Databases) Tablo Tanımları (TableDefs) Sorgu Tanımları (QueryDefs) Alanlar (Fields) Kayıt Kümeleri (Recordsets) İlişkiler (Relations) Nitelikler (Properties) DAO TEMELLERİ Nesneler ve Derlemler Ünlem (!) ve Nokta (.) İşaretlerinin Kullanımı Derlemin Sınırlarını Saptamak Varsayılan (Default) Derlemler Nesne Değişkenlerini Kurma ve Kullanma Nesne Değişkenlerini Kapatmak DAO NİTELİKLERİ Nitelik Türleri Nitelikler Derlemi Salt Okunur Nitelikler DAO METOTLARI DAO’NUN KULLANIMI Veritabanı Nesnesi Yaratmak Kullanıcı Tanımlı Nitelikler Oluşturmak Gruplar ve Kullanıcılar Eklemek Varolan Veritabanı Nesnelerini Sorgulamak Derlemleri Yenilemek Veritabanındaki Nesneleri Listelemek Nitelikleri Sorgulamak Varolan Veritabanı Nesnelerini Değiştirmek VERİ YÖNETİMİ
DAO’NUN KISA TARİHÇESİ
m
VERİ ERİŞİM NESNELERİ’NE (DATA ACCESS OBJECTS) GİRİŞ
DAO 1.0
Data Access Objects 1.0
ww w. ja
Data Access Objects 2.0
EN ÖNEMLİ YETENEKLERİ Visual Basic 2.0 ODBC üzerinden sınırlı veri erişimi. Sadece ileriye doğru veri erişimi. Microsoft Access 1.0 Tablolara ve sorgu nesnelerine arayüz, simgelenen tablolara nesneler, dinamik kümeler (dynasets) ve sınırlı sayıda özellikle görünümler. Visual Basic 3.0 Programlı olarak açık yapılara, “TableDef”, “QueryDef” ve “Field” nesneleri eklendi. Microsoft Access 2.0 OLE otomasyonunun ilk izleri, hemen hemen tüm Microsoft Jet fonksiyonlarına tam erişim. Çok sağlam nesne ve özellikler kümesi ile tam nesne modelleme. ODBC Masaüstü Veritabanı Hem 16, hem 32 bit platformlar Sürücüleri için yaratılmıştır. ODBC masaüstü veritabanı sürücüleri 2.0 ile kullanılmak üzere tasarlanmıştır. Sadece 16 bit versiyonu nakledilmiştir (Visual Basic 4.0’ın 16 bit versiyonu ile kullanımı için). Windows 95 için Microsoft Herhangi bir uygun sunucuya Access, Visual Basic 4.0 destek için geliştirilmiştir. (32bit), Microsoft Excel 7.0, Visual C++
dil
İsimsiz
SUNUCU VERSİYONU
va
ARAYÜZ
i.c o
DAO, Visual Basic 2.0 ile kullanıma başlanmasından beri, sadece sınırlı ve basit nesne kümeleri kümelerine erişen bir araçtan, hemen hemen tüm Misrosoft Jet görevlerini yapabilen çok sağlam bir araça dönüşmüştür. Aşağıdaki tablo DAO’nun gelişim evrelerini göstermektedir:
Data Access Objects 2.5
Data Access Objects 3.0
2
VERİ ERİŞİM NESNELERİ (DAO)
dil
i.c o
m
DAO, derlem ve nesne sıradüzeni olarak geliştirilmiştir. Tüm tablolar, alanlar, dizinler, sorgular ve diğerleri derlemler halinde düzenlenmiş nesneler tarafından temsil edilir. Her nesne, kendine ait özellikleri betimleyen nitelikler kümesine ve nesneler üzerinde çeşitli işlemleri gerçekleştirmek için kullanılan bir veya daha fazla metoda sahiptir.
va
Şekil 1. Derlemler, nesneler, nitelikler, metotlar.
ww w. ja
DAO sıradüzeninde, tüm nesneler, veritabanı motorunu temsil eden tek bir nesneden dallara ayrılır.
Şekil 2. DAO Sıradüzeni
3
Veritabanı Motoru (DBEngine)
m
“DBEngine” nesnesi veritabanı motorunu temsil eder. En üst seviye nesnesi olarak, DAO sırdüzeni altındaki tüm diğer nesneleri içerir ve kontrol eder.
i.c o
Hatalar (Errors)
DAO kullanarak işlemler gerçekleştirildiği zaman, hatalar elde edilebilir. Bu hatalar “Errors” derleminin içinde “Error” nesnesi olarak tutulur. Çalışma Alanları (Workspaces)
dil
Bir çalışma alanı nesnesi, motor üzerindeki her aktif oturum için vardır. Bir oturum, veritabanı motoru tarafından gerçekleştirilen işlem dizisini ayrıntılı olarak açıklar. Bir oturum, bir kullanıcı giriş yaptığı zaman başlar ve çıkış yapınca biter. Bir oturum boyunca yapılan tüm işlemler, bir işlem faaliyet alanı oluşturur. Çalışma alanı nesnesi, belirli bir kullanıcı için, bir kullanıcı/şifre güvenlik alanı ve bir işlem alanı sağlar. Bir çalışma alanları derlemi, o anda çalışan veritabanı motoru tarafından tanımalanan tüm çalışma alanı nesnelerini içerir.
va
Kullanıcılar (Users)
ww w. ja
Veritabanı motoru, veritabanında bulunan nesneleri, izinsiz erişimlerden korumak için güvenlik servisi sağlar. Bu güvenlik modeli, çalışma alanında tanımlanan kullanıcı ve gruplara dayanır. Bir kullanıcı nesnesi, çalışma alanı nesnesinin çalışma alanı veritabanında bir kullanıcı hesabı tanımlar. Kullanıcılar derlemi, çalışma alanındaki tüm kullanıcı nesnelerini içerir. Gruplar (Groups)
Kullanıcılar (Users) derleminde olduğu gibi, gruplar derlemi de güvenlik modelinde nesne erişimlerinin kontrolu için kullanılır. Gruplar derlemi tüm grup nesnelerini içerir. Her grup nesnesi, grup içindeki her kullanıcı nesnesini içeren bir kullanıcılar derlemi içerir. Veritabanları (Databases)
DAO’da, bir veritabanı nesnesi, o anda açık olan veritabanını simgeler. Bu bir yerel veritabanı dosyası veya harici başka bir veritabanı olabilir. Veritabanı veya başka tür bir dosya olmak üzere, aynı anda birden çok veritabanı açılabilir. Bir veritabanları derlemi, bir çalışma alanında bulunan tüm veritabanı nesnelerini içerir.
4
Tablo Tanımları (TableDefs)
i.c o
m
Tablo tanımı nesnesi, veritabanında tutulan bir tabloyu temsil eder. Aynı zamanda, birbirine bağlı tabloları da içerir. Tablo tanımı nesnelerinin tablonun verilerini değil, tablonun yapısını temsil söylemek önemli bir noktadır. Bir tablo tanımları derlemi, veritabanı için tüm tablo tanımı nesnelerini içerir. Sorgu Tanımları (QueryDefs)
Sorgu tanımı nesnesi, veritabanında kayıtlı bir sorguyu temsil eder ve sorgunun SQL temsilini içeren özelliklerinin bilgisini korur. Bir sorgu tanımları derlemi, veritabanı için tüm sorgu tanımı nesnelerini içerir. Alanlar (Fields)
dil
Alan nesnesi belirli bir alanı temsil eder. “TableDef”, “QueryDef”, dizin, ilişki ve kayıt kümesi nesneleri alanlar derlemi içerir. TANIM
DERLEM
İlişkiler
ww w. ja
Kayıt Kümeleri
Tablodaki alanları tanımlar ama tablodaki verileri içermez. Sorgudaki alanları tanımlar ama sorgudaki verileri içermez. Bilginin içeriğinde bir dizin oluşturan alanların karakteristik özelliklerini tanımlar. Bilginin içeriğinde bir ilişki oluşturan alanların karakteristik özelliklerini tanımlar. Kayıt kümesinin dayandığı tablo ve sorguların içinde bulunan alanları tanımlar. Alanın “değer” niteliğinde bulunan veriyi içerir.
va
Tablo Tanımları Sorgu Tanımları Dizinler
Kayıt Kümeleri (Recordsets)
Kayıt kümesi (Recordset) nesnesi, diğer veri erişim nesnelerinden biraz daha farklıdır çünkü kayıt kümeleri sadece kodunuz veya uygulamanız çalışırken varolur. Bir kayıt kümesi nesnesi, bellekte, bir ya da daha fazla tablodan gelen kayıtlar topluluğunu temsil eder. Kayıt kümeleri en güçlü yapılardan biridir çünkü sadece yerel Microsoft Jet tablolarına erişilmesini sağlamakla kalmaz, aynı zamanda Microsoft FoxPro gibi ISAM veri kaynaklarından veya Microsoft SQL Server gibi ODBC veri kaynaklarından tablolara da erişilmesini sağlar. Ayrıca, kayıt kümesi nesneleri, heterojen veri kaynaklarından gelen çoklu tabloları çaprazlayan sorgular dayandırılmış olabilir. Kayıt kümeleri derlemi, o anda açık olan veritabanı nesnesindeki tüm kayıt kümelerini içerir. Şurası vurgulanmalıdır ki, kayıt kümeleri, yalnızca bir kod ile açılan nesnelerdir ve çalışma aşamasında oluşturulurlar.
5
İlişkiler (Relations)
m
Bir ilişki nesnesi, bir ya da daha fazla tablonun kolonları arasında ilişkiyi temsil eder. Bir ilişkiler derlemi, verilen bir veritabanı nesnesi için tüm ilişki nesnelerini içerir.
i.c o
Nitelikler (Properties)
Her veri erişim nesnesi, bir nitelikler derlemine sahiptir. Bir nitelik nesnesi, bir nesnenin karakteristik özellikleri hakkında bilgi içerir. Bir nesnenin karakteristik özelliklerini öğrenmek için nitelik değerleri okunabilir veya başka bir nitelik değeri yazılabilir.
DAO TEMELLERİ
dil
Bu bölümde DAO nesneleri ve derlemleri ile nasıl çalışılacağı, nesnelerin nasıl kullanılacağı, ve nesne değişkenleri kullanılarak nasıl nesne temsil edileceği gösterilecektir. Nesneler ve Derlemler
va
DAO sıradüzeninin tartışılmasında görüldüğü üzere, nesne ve derlem kavramları çok önemlidir. Pek çok tür nesne, bu her türün üyesini içeren derlemlere sahiptir. Örneğin bir “TableDefs” derlemi, veritabanındaki tüm tablo tanımları kümesini temsil eder ve tüm bireysel “TableDef” nesnelerini içerir.
ww w. ja
Bir nesne genellikle, derlem sıradüzeni üzerinden erişilir. Bu da demek olur ki, erişilmek istenen nesneyi gösteren yolu programcı belirtir. Genel olarak bu işe, veritabanı motoru ile başlanır ve yol, sıradüzene göre çizilir. DBEngine. ParentCollection.ChildCollection!Name
Bir derlem içinde bulunan bir nesneye erişmenin 4 farklı yolu vardır:
1. Collection!name, veya Collection![name] Eğer “name” isimli nesne boşluk gibi standart olmayan karakterler içeriyorsa.
2.
Collection("name")
3. Collection(string) “string”, nesnenin ismini içeren bir ifade olmak üzere.
4. Collection(index) “index”, nesnenin derlem içindeki pozisyonu olmak üzere.
Birinci form kullanılarak bir nesneye direkt olarak adı ile erişilebilir. Bu format daha özlüdür ve uzun nesne refereanslarını diğer formlardan daha okunabilir yapar.
6
m
İkinci form kullanılarak, bir nesneye, adını vererek erişilir. Aşağıdaki iki örnek birbirinin denkidir. TableDefs("Customers") TableDefs("Cust" & "omers")
i.c o
Üçüncü form kullanılarak, bir nesneye, değişken kullanılarak erişim sağlanır.
Dördüncü form kullanılarak, bir nesneye, derlem içindeki pozisyonu belirtilerek erişilir. Bu formatın ana kullanım amacı, bir derlem içindeki nesneleri teker teker gezinmektir. Örneğin: For intX = 0 To 9 Debug.Print Next intX
Workspaces(0).Databases(0).TableDefs(intX).Name
dil
DAO derlemlerinde kullanılan dizinler her zaman 0-tabanlıdır. Bu, dizinler her zaman sıfırdan başlar anlamına gelmektedir. Bu önemli bir noktadır çünkü çoğu zaman 1-tabanlı dizinlerler çalışmaya alışılmıştır.
va
Söylenmesi gereken bir önemli nokta da, bir nesnenin derlem içindeki yerinin her zaman sabit olmadığıdır. Derleme bir nesne eklendiğinde veya derlemden bir nesne çıkartıldığında diğer nesnelerin yeri değişebilir. Bir derlem içindeki nesnelere sıra ile erişim yapılmıyorsa, doğrudan belirli bir nesneye erişim yapılacaksa, dizin numarası verilerek erişim sakıncalıdır. Ünlem (!) ve Nokta (.) İşaretlerinin Kullanımı
ww w. ja
DAO sözdiziminde, nesne referanslarının bölümleri, nokta veya ünlem işaretleri kullanılarak ayrılır. Ne zaman nokta, ne zaman ünlem işareti kullanılacağı ise kullanım durumuna bağlıdır. Genel olarak şu durumlarda kullanılır: • Eğer Microsoft Jet tarafından oluşturulmuş bir üye veya niteliğe erişmek isteniyorsa, ünlem; • Eğer başka bir kişi tarafından oluşturulmuş bir üye veya niteliğe erişmek isteniyorsa, nokta kullanılır.
Derlemin Sınırlarını Saptamak
Bir derlemin sınırlarını saptamak için, derlemin “Count” metodu kullanılır. Metodun değeri, derlem içindeki nesnelerin sayısını belirtir. Örneğin: bir derlemin “Count” metodu, 5 değerini geri döndürdüyse, derlem içinde 5 adet nesne var demektir. Aşağıda “Count” metodunun kullanımı örneklendirilmiştir: For intX = 0 to Workspaces(0).Databases(0).TableDefs.Count - 1 Debug.Print Workspaces(0).Databases(0).TableDefs(intX).Name Next intX
7
m
Bir nesne silindiği zaman, derlemin “count” niteliği bir azaltılır. Bu nedenle döngü kullanlarak yapılan sıradan silme işlemlerinde, üst sınır olarak “Count” metodu kullanılmamalıdır. Yukarıdaki örnekte, for döngüsü içinde yazılan ifade yerine silme işlemi yapılsaydı, döngü her tekrarlandığında “Count” metodunun ürettiği değer farklı olacaktır.
i.c o
Varsayılan (Default) Derlemler
Hemen hemen tüm veri erişim nesneleri varsayılan derlemlere sahiptirler. Bu varsayılan derlemler ile, kod içinde daha özlü bir erişim sağlanabilir. Örneğin: Çalışma Alanı nesnesinin varsayılan derlemi, Veritabanı derlemidir. Şu şekilde kullanılabilir: DBEngine.Workspaces(0).Databases(0) ifadesi varsayılan derlem kullanılarak; DBEngine.Workspaces(0) şeklinde, hatta daha da ileri gidilerek;
dil
DBEngine(0) şeklinde de kullanılabilir.
Aşağıdaki tablo DAO’da mevcut varsayılan derlemleri göstermektedir: Varsayılan Derlem
va
Nesne
Çalışma Alanları (Workspaces) Veri Tabanları (Databases) Gruplar (Groups) Kullanıcılar (Users) Tablo Tanımları (TableDefs) Alanlar (Fields) Alanlar (Fields) Parametreler (Parameters) Alanlar (Fields) Alanlar (Fields)
ww w. ja
Veritabanı Motoru(DBEngine) Çalışma Alanı (Workspace) Kullanıcı (User) Grup (Group) Veritabanı(Database) Kayıt Kümesi (Recordset) Tablo Tanımı (TableDef) Sorgu Tanımı (QueryDef) Dizin (Index) İlişki (Relation)
Nesne Değişkenlerini Kurma ve Kullanma
Bir nesne değişkenini kullnamak için, önce değişken türü tanımlanır ve daha sonra “set” metodu kullanılarak nesne o değişkene atanır. Genel kullanım şekli şöyledir:
Dim VarName As ObjectVariable
Set VarName=SomeDataAccessObject
8
Sonra
Function ShowFieldNames() Dim intX As Integer
Function BetterShowFieldNames() Dim intX As Integer Dim tblCustomers As TableDef
Set tblCustomers = DBEngine(0)(0).TableDefs("Customers")
i.c o
For intX = 0 To DBEngine(0)(0).TableDefs("Customers"). _ Fields.Count - 1 Debug.Print DBEngine(0)(0).TableDefs("Customers"). _ Fields(intX).Name Next intX End Function
m
Önce
For intX = 0 To tblCustomers.Fields.Count - 1 Debug.Print tblCustomers.Fields(intX).Name Next intX End Function
Bu kodlama stili, koda okunabilirlik, bakım ve gerçekleştirim kolaylığı sağlar.
va
Nesne Değişkenlerini Kapatmak
dil
Şurası önemlidir ki, nesne değişkenleri gerçek değişkenlerden türer ve gerçek değerleri yoktur. Değeri değil, bir nesneyi referans gösterirler. Bir başka ifadeyle, nesne değişkenleri, bir nesnenin kendisini değil, bellekteki tanımını gösterir.
ww w. ja
Bellekte tutulan ve kod içinde daha fazla ihtiyaç duyulmayacak olan nesneler, kapatılmalıdır. Bu nedenle DAO, bu geçici nesneleri kapatmak için “Close” metodu tanımlamıştır.
DAO NİTELİKLERİ
Nesneler ve derlemler, eğer karakteristik özelliklerinin yönetilmesinin veya sorgulanmasının hiç yolu yoksa, küçük değerleri vardır. DAO’daki nesnelerin tamamı, karakteristik özelliklerini belirten niteliklere sahiptir. İyelik değerleri, bir nesnenin niteliklerinin yeniden düzenlenmesine ve izlenmesine olanak sağlar. Nitelikler, “Nitelik” (Property) nesneleri ile temsil edilir. Nitelik nesnelerinin kendileri nitelikleri içerir. Her “Nitelik” nesnesi şu niteliklere sahiptir: Nitelik
Name Value Type Inherited
Tanım Niteliğin ismi Niteliğin değeri Niteliğin veri türü Bir niteliğin bir nesneden miras olaral alındığını belirtir. 9
Veri Türü Metin Değişken Tamsayı sabit Evet/Hayır
m
Nitelik Türleri
i.c o
İki tür nitelik vardır. • “Built-in” nitelikler • “User-defined” nitelikler
“Built-in” nitelikler, veritabanı motoru tarafından otomatik olarak oluşturulan ve takip edilen niteliklerdir. “User-defined” nitelikler, kullanıcılar tarafından oluşturulan niteliklerdir. Bir nesnenin “Nitelikler” derlemine, “Tanım” (Description) adı verilen, kullanıcı tarafından oluşturulan bir nitelik eklenerek, bir bilgi saklanabilir veya günlenebilir.
dil
Nitelikler Derlemi
Her veri erişim nesnesi, kendisi ile ilgili bir nitelikler derlemi içerir. Her derlem, nesnenin DAO’ya açtığı her karakteristik özelliği betimleyen nitelik nesnesi içerir. Niteliklere ve nitelikler derlemlerine diğer DAO neslerine erişildiği gibi erişilebilir: Properties!PropertyName or Properties![PropertyName], Eğer nitelik ismi, boşluk gibi standart olmayan karakterker içeriyorsa.
•
Properties("PropertyName")
•
va
•
Properties(expression)
ww w. ja
“expression”, nesnenin ismini içeren bir ifade olmak üzere. •
Properties(index)
“index”,
nesnenin derlem içindeki pozisyonu olmak üzere.
Örnek olarak, “Type” niteliğine erişim şu şekilde yapılabilir:
TableDefs!Customers.Fields!LastName.Properties!Type TableDefs("Customers").Fields("LastName").Properties("Type") TableDefs("Customers").Fields("LastName").Properties(strType) TableDefs("Customers").Fields("LastName").Properties!Type TableDefs("Customers").Fields("LastName").Properties(3)
Salt Okunur Nitelikler
Bir nesne yaratıldığı zaman, nesnenin karakteristik özelliklerini belirtmek için nitelikleri tanımlanır. Sonra oluşturulan nesne, veritabanının bir parçası yapmak için ilgili derleme eklenir. Ancak bu işlem yapılırken bazı nitelikler salt okunur olarak yaratılır. Bunu düzeltmenin tek yolu nesneyi silmek ve tekrar yaratmaktır.
10
DAO METOTLARI
m
Metotlar, nesneler üzerinde rol oynayan prosedürlerdir. Pek çok veri erişim nesnesi, bu nesnelerle faydalı bir şekilde iletişime geçmek için kullanılan metotlara sahiptir. Metotlar, tek bir önemli ayrımın dışında, kod içinde yazılan prosedürler ile aynıdır. Bu ayrım ise, metotlar nesneler çok belirgin bir şekilde bağlıyken, prosedürler bağımsız olarak çağırılırlar.
i.c o
Prosedürler gibi metottlar da, bir değer geri döndürebilir veya döndürmeyebilir. Metotların genel kullanımı şöyledir. object.method [[(] arglist [)]]
DAO’NUN KULLANIMI
dil
Veritabanı Nesnesi Yaratmak
Nesne yaratma işlemi iki aşamalı bir iştir. Önce bir nesne yaratılır ve karakteristik özellikleri tanımlanır. Sonra, sonra nesne kendisini veritabanının vazgeçilmez ve sürekli bir parçası yapan derleme eklenir. Eğer yaratılacak nesne alt nesneler içeriyorsa, önce ana nesneyi yaratılır, sonra alt nesne yaratılır ve derleme eklenir, daha sonra ana nesne derleme eklenir.
va
“CreateDatabase” metodu kullanılaral bir veritabanı oluşturulduğunda, veritabanı otomatik olarak kalıcı olur. Veritabanını kalıcı hale getirebilmek için Veritabanları derlemine eklemeye gerek yoktur.
ww w. ja
Kullanıcı Tanımlı Nitelikler Oluşturmak
Aşağıdaki örnek, varolan bir tabloyu açar, her alana, “DateLastModified” adında bir nitelik ekler ve böylece her alan için son değişim tarihi saklanabilir.
Sub AddNewProp() Dim dbsContacts As DATABASE Dim tblCustomers As TableDef Dim fldTmp As Field Dim prpNew As Property
Set dbsContacts = OpenDatabase("C:\Samples\Chap02\Contacts.mdb") Set tblCustomers = dbsContacts.TableDefs("Customers")
For Each fldTmp In tblCustomers.Fields Set prpNew = fldTmp.CreateProperty("DateLastModified") prpNew.Type = dbText prpNew.Value = Now fldTmp.Properties.Append prpNew Next fldTmp dbsContacts.Close End Sub
11
m
Tabi ki, sadece yeni bir nitelik eklemek bu niteliğin değerinin günlenmesini ve korunmasını sağlamaz. Gerçekleştirilen uygulamanın başka bir kısmında bu nitelik günlenmelidir. Gruplar ve Kullanıcılar Eklemek
Varolan Veritabanı Nesnelerini Sorgulamak
i.c o
Dao kullanılarak, kullanıcılar ve gruplar oluşturulabilir, nesnelere izinler atanabilir.
Yapıları elde etmede ana kavram, derlemler içinde gezinebilmektir.
dil
Derlemleri Yenilemek
Derlemleri sorgulamaktaki ana kavram, derlemleri yenilemektir. Bir derleme nesneler elendikçe ve derlemden nesneler silindikçe, DAO genellikle derlemin izlerini tutar. Buna rağmen, DAO’nun, nesnenin o anki durumunu bilemeyeceği durumlar da vardır. Bunlar:
• •
Kullanıcılar, çoklu kullanıcı ortamında ortak kullanılan bir veritabanını değiştiriyor olabilir. Kullanılan sorgular, yapıları eskitebilir (DROP TABLE Costumers). Değişiklikler bir sunucu programın kullanıcı arayüzü üzerined yapılıyor olabilir (Bu durum, Visual Basic gibi, DAO’yu direkt kullanan uygulamalar için geçerli değildir).
va
•
Yenileme için kullanılan genel kodlama tarzı
ww w. ja
Æ Collection.Refresh
şeklindedir.
Eğer yazılan kod, tablo tanımlarının tam bir listesini istiyorsa, kullanmadan önce tablo tanımlarını yenilemekte fayda vardır. Bu da: dbCurrent.TableDefs.Refresh
komutu ile gerçekleştirilir. “dbCurrent”, o anda açık olan veritabanına göstergedir. “Refresh” komutunu sadece gerekli olduğu yerde kullanmak performans açısından önemli bir mantıktır. Çünkü yenileme metodu zaman alan bir iştir.
12
Veritabanındaki Nesneleri Listelemek
m
Veri erişim neslerini listeleme işlemi, en çok gerçekleştirilen işlemlerdendir. Aşağıdaki örnek tüm tablo tanımları, sorgu tanımları ve ilişkileri listeler.
i.c o
Sub ShowInventory() Dim dbsContacts As DATABASE Dim tblDef As TableDef Dim qryDef As QueryDef Dim relDef As Relation Dim conDef As Container
Set dbsContacts = OpenDatabase _ ("C:\Samples\Chap02\Contacts.mdb")
dil
Debug.Print "TableDefs" For Each tblDef In dbsContacts.TableDefs Debug.Print " " & tblDef.Name Next tblDef Debug.Print "QueryDefs" For Each qryDef In dbsContacts.QueryDefs Debug.Print " " & qryDef.Name Next qryDef
ww w. ja
Nitelikleri Sorgulamak
va
Debug.Print "Relations" For Each relDef In dbsContacts.Relations Debug.Print " " & relDef.Name Next relDef dbsContacts.Close End Sub
Bir nesnenin niteliklerini elde etmek için, nesnenin nitelikler derleminde dolaşılır ve istenen ver alınır. Bazı özel koşullar bunda sorun çıkarabilir: •
•
Bazı nitelikler okunabilir olmayabilir. Örneğin, bir kullanıcının şifre niteliği okunamaz. Eğer okunabiliyorsa bu uygulamada büyük bir açık var demektir. Özellikle aranan bazı bilgiler, bulunmuyor olabilir.
Aşağıdaki örnek, o anda açık olan veritabanındaki tüm kullanıcıların, tüm niteliklerini listelemektedir.
13
i.c o
For Each usrDef In Workspaces(0).Users For Each prpDef In usrDef.Properties ' Disable VBA error handling On Error Resume Next varPropertyValue = prpDef.Value
m
Sub ShowUserProps() Dim usrDef As User Dim prpDef As Property Dim varPropertyValue As Variant
dil
' See if an error occurred Select Case Err Case 3251 ' Feature not available error Debug.Print prpDef.Name & ": <error: " _ & Error$ & ">" Case 0 ' No error Debug.Print prpDef.Name & ":" & varPropertyValue Case Else ' Unanticipated error Error Err End Select
va
' Re-enable VBA error handling On Error GoTo 0 Next prpDef Next usrDef End Sub
Varolan Veritabanı Nesnelerini Değiştirmek
ww w. ja
DAO’nun kullanımında bir önemli nokta da varolan nesnelerin yapılarını değiştirebilme yeteneğidir. Gerekli ve mümkün olan her yerde DAO, bir nesnenin yapısını değiştirmede kullanılabilir. Ancak yapılamayacak bazı değişiklik işlemleri de vardır. Örneğin bir tablo tanımında bir alanın tür bilgisini değiştirmek, o alandaki tüm verilerin türlerini değiştirmek anlamına geleceği için, bu işlem yapılamaz. Bunu yapmak için, o alan tamamen silinmeli ve yeniden yaratılmalıdır. VERİ YÖNETİMİ
Son olarak DAO tartışmasını toparlamak için, DAO’nun en önemli kullanım alanlarından birinden bahsetmekte fayda vardır: Veri Yönetimi. DAO’da Kayıt Kümesi nesnesi (Recordset), veritabanında depolanmış olan veri ile birincil olarak etkileşen nesnedir. Kayıt Kümesi neneleri çok güçlüdür çünkü veri ile çalışırken büyük bir esneklik sağlarlar. Kayıt Kümesi nesneleri diğer veri erişim nesnelerinden, sadece geçici birer nesne olmaları yönünden ayrılırlar. Kayıt kümesi açmak için kullanılan metot “OpenRecordset”, olmasına rağmen, gerçekten varolan bir Kayıt Kümesi nesnesi açılmamaktadır; her seferinde yenisi üretilir. Kapatıldıktan sonra Kayıt Kümesi daha fazla varolmaz.
14
nesnesine
tabanlı
m
Bir Kayıt Kümesi nesnesi oluşturmak için, veritabanı “OpenRecordset” metodu kullanılır ve sözdizimi şu şekildedir.
Set variable = database. OpenRecordset(source[, type[, options]])
Üç çeşit kayıt kümesine nesnesi vardır:
“Table-type Recordset”: O anda açık olan veritabanında bulunan, kayıt ekleme, silme, sorgulama, değiştirme yapılabilen bir tablonun kod ile temsilidir.
•
“Dynaset-type Recordset”: Günlenebilir kayıtları olan bir sorgu sonucudur. Bir “dynaset”, arkasında bulunan bir veritabanından, kayıtların ekleme, silme, değiştirme yapılabileceği bir dinamik kayıt kümesidir. Bir dinamik kayıt kümesi farklı tablolardan alanlar içerebilir. Bir sorgu sonucu oluşan mantıksal kayıt kümeleridir.
•
“Snapshot-type Recordset”: Rapor oluşturmak veya veri bulmak için kullanılabilen bir kayıt kümesinin static bir kopyasıdır. Veritabanındaki pek çok tablodan farklı alanlar içerebilir ama bu alanlar günlenemez.
Kayıt kümesi nesneleri,
Direkt olarak veritabanı içindeki tablolar üzerine Başka veritabanları içindeki tablolar üzerine Harici veri kaynaklarına bağlı tablolar üzerine Sorgular üzerine Kod içinde dinamil olarak oluşturulan sorgu katarları üzerine
açılabilir.
va
• • • • •
dil
i.c o
•
ww w. ja
Aynı zamanda bir kayıt kümesi oluşturulurken bir takım özellikler de belirlenebilir. • • • • •
Erişilen bir tabloya diğer kullanıcıların erişimi sınırlanabilir. Diğer kullanıcıların kayıtları okuması engelenebilir. Kendi veri erişim türünün salt okunur olması sağlanabilir (table-type). Sadece yeni veri eklenebileceği belirtilebilir (dynaset-type) Tutarlı veya tutarsız veri günlenmesine izin verilebilir.(dynaset-type)
Referans: http://www.microsoft.com adresinden, yorumlanarak Türkçeleştirilmiştir.
15