ADO ve VBA hakkında ne kadar çok bilgiye sahipsek, bunların nimetlerinden de o derece yararlanabiliriz. Vba’da ADO ile başarılı uygulamalar geliştirebilmek için SQL konusunda temelin az üzerinde, Vba konusunda da ortalama üzeri bir bilgi ve beceriye sahibi olmamız gerekiyor. Bu nedenle verilen örneklerde Vba komutları veya SQL komutları açıklanmayacaktır.

ADO bağlantı ve kayıtseti nesnelerini açmak için birkaç değişik yöntem kullanabiliriz.
Şimdi D:\exceldepo\exceldepodb.mdb yolunda bir Access mdb database dosyamız olduğunu düşünelim. (siz bu yolu istediğiniz gibi ayarlayabilirsiniz)
Tablomuzdaki alanlar ve veriler de aşağıdaki resimdeki gibi bir yapıda olsun.

tablo yapısı


VBA ortamında da bir modül ekleyelim ve sayfa başına aşağıdaki tanımlamaları yazalım. Modül olması şart değil, sayfa ve form da olabilir.


Burada nesneleri peşin peşin oluşturdum. Prosedür içinde ayrıca yeni nesne oluşturmaya gerek kalmayacak. Tanımlamaları prosedür içinde de yapabiliriz, ben dışında yapmayı tercih ettim.


Şimdi ADO bağlantı ve kayıtseti nesnelerini açmak için yöntemleri inceleyelim. Başka yöntemler de olabilir ancak en çok kullanılanları ele alacağız.

Bu arada Command, Connection, Record, Recordset ve Stream nesnelerinin durumlarını State özelliği ile öğrenebiliriz. Döndürülen değerler aşağıdaki gibi olacaktır:

DurumDeğerAçıklama
adStateClosed0Nesne Kapalı.
adStateOpen1Nesne Açık.
adStateConnecting2Nesne Bağlanıyor.
adStateExecuting4Nesne Komut Çalıştırıyor.
adStateFetching8Nesneden Satırları Alınıyor.

BİR BAĞLANTI (ADODB.CONNECTION) NESNESİN AÇILMASI

Bir veritabanında işlem yapabilmek için önce bir bağlantı metnini ihtiyaç duyarız. Nasıl bağlanabiliyoruz bir bakalım.

1. Bir bağlantı (connection) nesnesini bağlantı metnine (connection string) eşitleyerek

Modül içinde aşağıdaki gibi Baglan adında bir prosedür yazalım. BagMetin değişkeni ve nesneleri sayfa başında tanımlamıştık.

Prosedürde önce BagMetin değişkenine bağlantı metnini atıyoruz. Burada bağlanacağımız veritabanı Excel sayfasıda, txt metni de, mysql veya mssql veritabanı sunucu da olabilir. Ben basitlik amacı ile mdb dosyası seçtim. Sonra tanımladığımız Baglantı nesnesinin (ADODB.Connection) ConnectionString özelliğine BagMetin değişkenini veya doğrudan bağlantı metnini eşitliyoruz. Bağlantıyı açıyoruz ve sonraki satırda Baglanti nesnesinin State (durum) özelliğini MsgBox ile görüntülüyoruz. Ekranda 1 yazıyorsa bağlantı açık demektir. Sonra bağlantı nesnesini kapatıp hafızadan siliyoruz be prosedürü sonlandırıyoruz.


2. Open() yöntemi yanında bir bağlantı metni veya metni içeren bir string değişken vererek

Bu yöntemde Bağlantı nesnesinin Open özelliğinden sonra bağlantı metnini yazıyoruz. Bir önceki yöntemden farkı, ConnectionString özelliğinin ayrıca tanımlanmaması sayılabilir. Bir satır daha az kod yazarız.


3. Bağlantı (connection) nesnesinin Open() komutundan sonra doğrudan bağlantı metnini vererek

Bu yöntem bir önceki yöntemle birebir aynıdır. Burada Bağlantı metni Openözelliğinden sonra doğrudan tırnak içinde yazılmıştır. Burada da bir satır azalttık kodu.


Bağlantı (ADODB.Connection) nesnesin açılmasını gördük. Bir veritabanınada işlem yapmak için bağlantımızı yapmayı öğrendik. Şimdi de kayıt seti (ADODB.Recordset) nesnesinin açılmasını görelim.

BİR KAYIT SETİ (ADODB.RECORDSET) NESNESİN AÇILMASI

Önce biraz hazırlık yapalım. Excelde Vba pencersinde Proje pencersinde Forms projelerine aşağıdaki bir user form ekleyelim. Deneyeceklere kodları okumada kolaylık açısından butonların ve listebox adını form üzerinde yazdım. Properties penceresinden Lisboxun columncount özelliğine 5 yazıyoruz.

userform


Şimdi de uzatmadan kayıt seti açma yöntemlerine geçelim. Bağlantıyı yukarıda bahsettiğimiz istediğimiz bir yöntemle açabilirsiniz. Buradaki örneklerde 3. Yöntemi kullanacağız. Kod sayfası başına aşağıdakileri yazıyoruz yine. Her prosedürde de kod başlangıcında listboxtaki verileri temizleyeceğiz.


1. Kayıtsetini CONNECTION.EXECUTE Metodu ile Açma

Bu yöntem oldukça hızlı ve pratiktir. Veritabanını çok az meşgul eder. Örneğin kayıtsetinin getrows özelliği ile listboxları belki 25 kat yada daha hızlı doldurabilirsiniz. Kodları inceleyelim.

Bağlantı nesnesini sql sorgusuyla execute ederek sonuçları Kseti adlı kayıtsetine alıyoruz. Burdan listbox’un column özelliğne kayıtsetinin GetRows özelliğini atıyoruz ve veriler listboxta. Kayıtseti ve diğerlerini kapatıp hafızadan siliyoruz. Aslında ne kadar az kodla ne kadar çok iş yaptık değil mi?


Elde ettiğimiz çıktı aşağıdaki gibi olacaktır:

sonuç userform


2. Kayıtsetini ADODB Command.Execute Metodu İle Açma

Bu yöntemde SqlKomut adında bir ADODB.Command nesnesi tanımlıyoruz ve sorguyu kamuta verip kayıtsetini bununla açıyoruz. SqlKomut.Execute(Sorgu) satırına dikkat edelim.


1. yöntemdeki ile aynı görüntüyü elde edeceğiz.

3. Kayıtsetini Recordset.Open ve Command.Execute Metodu İle Açma

Burada KSeti.Open SqlKomut satırına dikkat edelim. Kayıtsetini açarken yanında komut nesnesini veriyoruz.


Buradaki görüntüde, 1. yöntemin aynısı olacaktır.

4. Bağlantı ve Kayıtsetini Aynı Satırda Vererek Açma

Burada KSeti.Open "SELECT * FROM Ilceler", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\exceldepo\exceldepodb.mdb" satırına dikkat edelim. Her şeyi tek satırda verdik. Tabiki Kseti.Open dan sonra sorguyu ve bağlantı metnini içeren değişkeleri de yazabilirdik. Burada bağlantıyı açmadığımız için kapatmaya da gerek yok.


Buradaki görüntüde, 1. yöntemin aynısı olacaktır.

Bu satıra geldiyseniz, makalemin tamamını okumuşsunuz demektir.
Teşekkür eder, faydalı olmasını temenni ederim.
Örnek dosyamı, Ado Bağlantı ve Kayıt Seti Açma Yöntemleri adresinden indirebilirsiniz.

Yapacağınız yorumlar, soracağınız sorular devamının gelmesi için motivasyon sağlayacaktır.
  • Sevdim
Tepkiler: 52779