Kapalı bir dosyadan ADO & SQL sorgu ile veri alma ile ilgili basit (temel) bir örnek vermek istiyorum.
Kapalı bir dosyadan ADO & SQL sorgu ile veri alma ile ilgili basit (temel) bir örnek vermek istiyorum.
■ Kodlarımız bu şekilde;
Sub Kapalıdan_Al()
Dim Con As Object, Rs As Object, Sorgu As String
Set Con = CreateObject("Adodb.Connection")
Set Rs = CreateObject("Adodb.RecordSet")
Con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.Path & "\Kapalı_Dosya.xlsx" & ";extended properties=""excel 12.0;hdr=no"""
Sorgu = "Select * from [Sayfa1$] where f1 ='Murat'"
Rs.Open Sorgu, Con, 1, 1
Range("A1").CopyFromRecordset Rs
Rs.Close: Con.Close
Set Con = Nothing: Set Rs = Nothing: Sorgu = ""
End Sub
Soru : Peki bu kodlar bize ne anlatıyor ? Biz ne yapmak istedik ve bu kodlar kapalı dosyadan bize neyi getirecek ?
Cevap: Dilerseniz size satır satır kodların ne anlama geldiklerini izah edeyim.
■ Prosedürümüzün (Makromuzun) Adı
Sub Kapalıdan_Al()
■ Bu satırda: kullanacağımız değişkenlerin tanımını yapıyoruz. Con ve Rs değişkenlerini Object (nesne) olarak tanımladık. Sorgu değişkenini ise metinsel bir veri olacağı için String olarak tanımladık.
Dim Con As Object, Rs As Object, Sorgu As String
■ Bu satırlarda: Late Binding sistemiyle ADO referansı seçilmeden, Bağlantı (Connection) ve KayıtSeti (RecordSet)'ni Create ediyoruz. Con artık ADO bağlantı değişkenimiz, Rs' yi de sorgu sonucu alacağımız verilerin (KayıtSetinin) değişkeni olarak set ediyoruz.
Set Con = CreateObject("Adodb.Connection")
Set Rs = CreateObject("Adodb.RecordSet")
■ Bu satırda: belirlediğimiz Connection String ile bağlantımızı açıyoruz. Microsoft.ACE.OLEDB.12.0 sağlayıcı ile & _
ThisWorkbook.Path & "\Kapalı_Dosya.xlsx" & (ThisWorkbook = Excel dosyasının bulunduğu dizini ifade eder) Thisworknook.Path altındaki Kapalı_Dosya.xlsx dosyasına bağlanacağımızı belirtiyor ve bağlandığımız bu dosyada (HDR=NO) ile, başlık satırının olmadığını belirtiyoruz.
Con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.Path & "\Kapalı_Dosya.xlsx" & ";extended properties=""excel 12.0;hdr=no"""
■ Bu satır: bizim SQL sorgumuzu yazdığımız satır. Yani; kapalı dosyadan almak istediğimiz veriyi ve bu veriyi alırken bir şartımız var ise onu belirtiyoruz. Sorgulama yaparken Select deyimini kullanarak başlıyoruz. Şimdi bu satır bize diyor ki: Bağlandığımız dosyanın Sayfa1 isimli sayfasının F1 (ilk dolu alan/sütun) alanındaki veriler Murat'a eşitse, yani F1 de Murat yazılı olan var ise diyoruz, burada Select deyiminden sonra * (yıldız) işareti koydum, yıldız işareti: dolu olan tüm alan/sütunları ifade eder. Eğer istediğimiz şarta uyan veri var ise o şarta uyan verileri (satır ve tüm sütunları) hafızaya al diyoruz.
Sorgu = "Select * from [Sayfa1$] where f1 ='Murat'"
■ Bu satırda sorgu sonucu hafızaya aldığımız verilerin KayıtSetini açıyoruz. Artık hafızadaki verileri istediğimiz herhangi bir yere aktarabiliriz.
Rs.Open Sorgu, Con, 1, 1
■ Burada sorgu sonucunda alacağımız verileri nereye yazdıracağımızı belirtiyoruz. Ben CoprFromRecordSet metoduyla bu verileri A1 hücresinden itibaren alt alta listelemesini istedim.
Range("A1").CopyFromRecordset Rs
■ Bu satırda: artık kapalı dosyadan istediğimiz verileri aldığımız için, yapacak bir işlemimiz kalmadığından önce RecordSet'i sonra da Connection'ı kapatıyoruz.
Rs.Close: Con.Close
■ Bu satırda en başta atadığımız değişkenlerin içini boşaltıyoruz. Nesnelerin içi Set nesneadı = Nothing şeklide boşaltılır. String değişkeninin de, ya Değişkenadı = "" ya da Değişkenadı = vbnullstring şeklinde boşaltılır.
Set Con = Nothing: Set Rs = Nothing: Sorgu = ""
■ Bu satırla da artık prosedürümüzü (makromuzu) sonlandırıyoruz.
End Sub
Umarım bu konu ile ilgilenen, öğrenmek isteyen kişiler için faydalı bir anlatım olmuştur...
Hoşça kalın !
Kapalı bir dosyadan ADO & SQL sorgu ile veri alma ile ilgili basit (temel) bir örnek vermek istiyorum.
■ Kodlarımız bu şekilde;
Sub Kapalıdan_Al()
Dim Con As Object, Rs As Object, Sorgu As String
Set Con = CreateObject("Adodb.Connection")
Set Rs = CreateObject("Adodb.RecordSet")
Con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.Path & "\Kapalı_Dosya.xlsx" & ";extended properties=""excel 12.0;hdr=no"""
Sorgu = "Select * from [Sayfa1$] where f1 ='Murat'"
Rs.Open Sorgu, Con, 1, 1
Range("A1").CopyFromRecordset Rs
Rs.Close: Con.Close
Set Con = Nothing: Set Rs = Nothing: Sorgu = ""
End Sub
Soru : Peki bu kodlar bize ne anlatıyor ? Biz ne yapmak istedik ve bu kodlar kapalı dosyadan bize neyi getirecek ?
Cevap: Dilerseniz size satır satır kodların ne anlama geldiklerini izah edeyim.
■ Prosedürümüzün (Makromuzun) Adı
Sub Kapalıdan_Al()
■ Bu satırda: kullanacağımız değişkenlerin tanımını yapıyoruz. Con ve Rs değişkenlerini Object (nesne) olarak tanımladık. Sorgu değişkenini ise metinsel bir veri olacağı için String olarak tanımladık.
Dim Con As Object, Rs As Object, Sorgu As String
■ Bu satırlarda: Late Binding sistemiyle ADO referansı seçilmeden, Bağlantı (Connection) ve KayıtSeti (RecordSet)'ni Create ediyoruz. Con artık ADO bağlantı değişkenimiz, Rs' yi de sorgu sonucu alacağımız verilerin (KayıtSetinin) değişkeni olarak set ediyoruz.
Set Con = CreateObject("Adodb.Connection")
Set Rs = CreateObject("Adodb.RecordSet")
■ Bu satırda: belirlediğimiz Connection String ile bağlantımızı açıyoruz. Microsoft.ACE.OLEDB.12.0 sağlayıcı ile & _
ThisWorkbook.Path & "\Kapalı_Dosya.xlsx" & (ThisWorkbook = Excel dosyasının bulunduğu dizini ifade eder) Thisworknook.Path altındaki Kapalı_Dosya.xlsx dosyasına bağlanacağımızı belirtiyor ve bağlandığımız bu dosyada (HDR=NO) ile, başlık satırının olmadığını belirtiyoruz.
Con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.Path & "\Kapalı_Dosya.xlsx" & ";extended properties=""excel 12.0;hdr=no"""
■ Bu satır: bizim SQL sorgumuzu yazdığımız satır. Yani; kapalı dosyadan almak istediğimiz veriyi ve bu veriyi alırken bir şartımız var ise onu belirtiyoruz. Sorgulama yaparken Select deyimini kullanarak başlıyoruz. Şimdi bu satır bize diyor ki: Bağlandığımız dosyanın Sayfa1 isimli sayfasının F1 (ilk dolu alan/sütun) alanındaki veriler Murat'a eşitse, yani F1 de Murat yazılı olan var ise diyoruz, burada Select deyiminden sonra * (yıldız) işareti koydum, yıldız işareti: dolu olan tüm alan/sütunları ifade eder. Eğer istediğimiz şarta uyan veri var ise o şarta uyan verileri (satır ve tüm sütunları) hafızaya al diyoruz.
Sorgu = "Select * from [Sayfa1$] where f1 ='Murat'"
■ Bu satırda sorgu sonucu hafızaya aldığımız verilerin KayıtSetini açıyoruz. Artık hafızadaki verileri istediğimiz herhangi bir yere aktarabiliriz.
Rs.Open Sorgu, Con, 1, 1
■ Burada sorgu sonucunda alacağımız verileri nereye yazdıracağımızı belirtiyoruz. Ben CoprFromRecordSet metoduyla bu verileri A1 hücresinden itibaren alt alta listelemesini istedim.
Range("A1").CopyFromRecordset Rs
■ Bu satırda: artık kapalı dosyadan istediğimiz verileri aldığımız için, yapacak bir işlemimiz kalmadığından önce RecordSet'i sonra da Connection'ı kapatıyoruz.
Rs.Close: Con.Close
■ Bu satırda en başta atadığımız değişkenlerin içini boşaltıyoruz. Nesnelerin içi Set nesneadı = Nothing şeklide boşaltılır. String değişkeninin de, ya Değişkenadı = "" ya da Değişkenadı = vbnullstring şeklinde boşaltılır.
Set Con = Nothing: Set Rs = Nothing: Sorgu = ""
■ Bu satırla da artık prosedürümüzü (makromuzu) sonlandırıyoruz.
End Sub
Umarım bu konu ile ilgilenen, öğrenmek isteyen kişiler için faydalı bir anlatım olmuştur...
Hoşça kalın !