ADO Bağlantı ve Kayıtseti Nesnelerinin Açılması

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.

image-20190224200425-1.webp


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.

Kod:
Dim BagMetin As String, Sorgu As String
Dim Baglanti As New ADODB.Connection
Dim KSeti As New ADODB.Recordset
Dim SqlKomut As New ADODB.Command

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.

Kod:
Set Baglanti = New ADODB.Connection

Ş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.

Kod:
Sub Baglan1()

BagMetin = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\exceldepo\exceldepodb.mdb"
Baglanti.Open BagMetin

MsgBox Baglanti.State

Baglanti.Close
Set Baglanti = Nothing

End Sub

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.

Kod:
Sub Baglan2()

Baglanti.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\exceldepo\exceldepodb.mdb"

MsgBox Baglanti.State

Baglanti.Close
Set Baglanti = Nothing

End Sub

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.

Kod:
Sub Baglan3()

Baglanti.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\exceldepo\exceldepodb.mdb"

MsgBox Baglanti.State

Baglanti.Close
Set Baglanti = Nothing

End Sub

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.

image-20190224201302-2.webp


Ş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.

Kod:
Dim BagMetin As String, Sorgu As String
Dim Baglanti As New ADODB.Connection
Dim KSeti As New ADODB.Recordset
Dim SqlKomut As New ADODB.Command

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?

Kod:
Private Sub btnMtd1_Click()

Me.ListBoxExcelDepo.Clear
Sorgu = "SELECT * FROM Ilceler"
Baglanti.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\exceldepo\exceldepodb.mdb"

Set KSeti = Baglanti.Execute(Sorgu)
Me.ListBoxExcelDepo.Column = KSeti.GetRows
KSeti.Close

Baglanti.Close
Set Baglanti = Nothing

End Sub

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

image-20190224201630-3.webp


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.

Kod:
Private Sub btnMtd2_Click()
Me.ListBoxExcelDepo.Clear
Sorgu = "SELECT * FROM Ilceler"
Baglanti.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\exceldepo\exceldepodb.mdb"

SqlKomut.ActiveConnection = Baglanti
SqlKomut.CommandText = Sorgu

Set KSeti = SqlKomut.Execute(Sorgu)
Me.ListBoxExcelDepo.Column = KSeti.GetRows


Baglanti.Close
Baglanti.Close: KSeti = Nothing
End Sub

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.

Kod:
Private Sub btnMtd3_Click()
Me.ListBoxExcelDepo.Clear
Sorgu = "SELECT * FROM Ilceler"
Baglanti.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\exceldepo\exceldepodb.mdb"

SqlKomut.ActiveConnection = Baglanti
SqlKomut.CommandText = Sorgu

KSeti.Open SqlKomut

Me.ListBoxExcelDepo.Column = KSeti.GetRows
Baglanti.Close
End Sub

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.

Kod:
Private Sub btnMtd4_Click()
Me.ListBoxExcelDepo.Clear
KSeti.Open "SELECT * FROM Ilceler", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\exceldepo\exceldepodb.mdb"
Me.ListBoxExcelDepo.Column = KSeti.GetRows
KSeti.Close
End Sub

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.
 
Geri
Üst