Forum
Kapalı bir dosyadan [b]ADO[/b] & [b]SQL[/b] sorgu ile veri alma ile ilgili basit (temel) bir örnek vermek istiyorum.
■ [b]Kodlarımız bu şekilde;[/b]
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
[b]Soru[/b] : Peki bu kodlar bize ne anlatıyor ? Biz ne yapmak istedik ve bu kodlar kapalı dosyadan bize neyi getirecek ?
[b]Cevap[/b]: 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. [b]Con[/b] ve [b]Rs[/b] değişkenlerini [b]Object[/b] (nesne) olarak tanımladık. [b]Sorgu[/b] değişkenini ise metinsel bir veri olacağı için [b]String[/b] olarak tanımladık.
Dim Con As Object, Rs As Object, Sorgu As String
■ Bu satırlarda: [b]Late Binding[/b] sistemiyle [b]ADO[/b] referansı seçilmeden, Bağlantı ([b]Connection[/b]) ve KayıtSeti ([b]RecordSet[/b])'ni [b]Create[/b] ediyoruz. [b]Con[/b] artık [b]ADO[/b] bağlantı değişkenimiz, [b]Rs[/b]' yi de sorgu sonucu alacağımız verilerin ([b]KayıtSetinin[/b]) değişkeni olarak [b]set[/b] ediyoruz.
Set Con = CreateObject("Adodb.Connection")
Set Rs = CreateObject("Adodb.RecordSet")
■ Bu satırda: belirlediğimiz [b]Connection String[/b] ile bağlantımızı açıyoruz. [b]Microsoft.ACE.OLEDB.12.0[/b] sağlayıcı ile & _
ThisWorkbook.Path & "\Kapalı_Dosya.xlsx" & ([b]ThisWorkbook[/b] = Excel dosyasının bulunduğu dizini ifade eder) [b]Thisworknook.Path[/b] altındaki [b]Kapalı_Dosya.xlsx[/b] dosyasına bağlanacağımızı belirtiyor ve bağlandığımız bu dosyada ([b]HDR=NO[/b]) 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 [b]SQL[/b] 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 [b]Select[/b] deyimini kullanarak başlıyoruz. Şimdi bu satır bize diyor ki: Bağlandığımız dosyanın [b]Sayfa1[/b] isimli sayfasının [b]F1[/b] (ilk dolu alan/sütun) alanındaki veriler [b]Murat[/b]'a eşitse, yani [b]F1[/b] de [b]Murat[/b] yazılı olan var ise diyoruz, burada [b]Select[/b] deyiminden sonra * ([b]yıldız)[/b] 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 [b]KayıtSetini[/b] 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 [b]CoprFromRecordSet[/b] metoduyla bu verileri [b]A1[/b] 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 [b]RecordSet[/b]'i sonra da [b]Connection[/b]'ı 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 [b]Set nesneadı = Nothing[/b] şeklide boşaltılır. [b]String[/b] değişkeninin de, ya [b]Değişkenadı = ""[/b] ya da [b]Değişkenadı = vbnullstring[/b] şeklinde boşaltılır.
Set Con = Nothing: Set Rs = Nothing: Sorgu = ""
■ Bu satırla da artık [b]prosedürümüzü[/b] (makromuzu) sonlandırıyoruz.
End Sub
Umarım bu konu ile ilgilenen, öğrenmek isteyen kişiler için faydalı bir anlatım olmuştur...
[b]Hoşça kalın ![/b]
Paylaşım için teşekkürler.
1984 doğumluyum. 4 yaşından bu yana İstanbul’da yaşıyorum. Sırası ile aşağıdaki okullarda eğitim gördüm. Paşaköy ilkokulu (1990-1995) Kartal Zekeriyya Güçer İlköğretim Okulu(1995-1998) Ümraniye Teknik ve Endüstri Meslek Lisesi Bilgisayar Bölümü(1998-2001) Kocaeli Üniversitesi Bilgisayar Programcılığı(2002-2004) Anadolu Ünv. İşletme Fakültesi(2006-2009) Lise yıllarından sonra bir bilgisayar firmasının teknik servisinde mesleğe merhaba dedim. Outsource olarak Citibank ytl ve bina taşınma projesinde yer alarak 8 ay görev yaptım. Bu görevden sonra şu an çalışmakta olduğum yerde bilgi işlem sorumlusu olarak göreve başladım ve 18 yıldır görevimin başındayım.
Faydalı olması dileğiyle.
Murat hocam anlatımınız süper olmuş. Benim sormak istediğim bunun tam tersi yani kapalı dosyaya şartlı veri gönderimi nasıl yapabiliriz.