Excel’ e Sql Server üzerinden veri çekmek Excel Vba ADODB
Excel Vba Aracılığıyla Sql veritabanı ile bağlantı kurulması ve ilk veri çekimi işlemini gerçekleştireceğiz. Öncelikle sql server da kitaplar adında bir veritabanım mevcut ve bu veritabanının içerisinde kitap isimlerinin olduğu kitap_isimleri isimli bir tablom var.
SELECT * FROM kitap_isimleridediğim zaman bana 2061 satırdan oluşan kitap id ve isimlerini içeren veriyi verdi. Şimdi burada istenilen aslında verinin tamamını excel e çekmek ama bir rapor hazırlıyorsak ve bu tablodan belirli bir filtreleme sonucu elde edilen bilgiyi almak istiyorsak bunu direk sql sorgusu ile oynayarak yapabiliriz. Tabi bu biraz duruma göre tabi işin içinde performans durumu da var. Sadece fikir vermek açısından belirttim.

Şimdi işin excel tarafına gelelim. Öncelikle makro çalıştıracağımız için dosyamızın uzantısının .xlsm olmasına dikkat edelim. Daha sonra Sql Server a bağlantı ayarlarımızı yapmadan önce bağlantı işlemlerinde bir kütüphane kullanacağız bunun için kod editörümüzde Tools” sekmesi altında “References” a tıklıyoruz.

Daha sonra buradan “Microsoft Activex Data Objects Library ” i referans olarak dosyamıza eklememiz gerekiyor. Ben de en son sürüm ” Microsoft Activex Data Objects 6.1 Library” sürümü en güncel sürüm o yüzden onu seçtim. Sizin dosyanızda en güncel sürüm hangisi ise onu seçiniz.

Bunları bitirdikten sonra şimdi artık kod yazmaya başlayabiliriz.
Dim connect As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim sunucu, veritabani, ID, sifre, sorgu As Stringyukarıda belirttiğim şekilde tanımlamalarımızı yapıyoruz.. “ADODB.Connection” sınıfısınden new diyerek “connect” isminde bir nesne türetiyoruz. Burada “connect ” ismini istediğiniz gibi değiştirebilirsiniz. “ADODB.Recordset” için ise “Rs” kısalma adını kullandım bunu da yine değiştirebilirsiniz. Buda çektiğimiz veriyi tutacağımız ve istediğimiz yerde kullanabileceğimiz veri setimiz. Daha sonra bağlantı işlemini yapacağımız ve yukarıda “String” türünde belirlediğimiz değişkenlere atama yapıyoruz.
sunucu = "root"
veritabani = "kitaplar"
ID = "sa"
sifre = "123456"ben burada kendi bilgisayarımdaki bilgilere göre düzenledim. Eğer bir local yada uzak ip ye bağlantı yapacaksanız sunucu değişkenine o ip adresini atamanız yeterli. Gerisi zaten veritabanı adı, veritabanı kullanıcı adı ve şifresi.
Bunları da yaptıktan sonra sorgu değişkenimizi de dolduruyoruz.
sorgu = "SELECT * FROM kitap_isimleri"ben kitap_isimleri tablosunun tamamını çekmek istediğim için “SELECT * FROM kitap_isimleri” sorgusunu kullanıyorum.
Şimdi gelelim bağlantı işlemine
connect.Open "Driver={SQL SERVER};Server=" & sunucu & ";Database=" & veritabani & ";Uid=" & ID & ";Pwd=" & sifre & ";"burada connect nesnesine ADODB.Connection özelliğini atadığımızdan bağlantıyı .open diyerek açıyoruz. Buradaki yapıya çok takılmayın bu standart değildir.
Bu sitede istediğiniz türde bağlantı sözcüklerine ulaşabilirsiniz. Ben birden fazla yöntemden birisini seçtim ve kullanıyorum. İşlev anlamında birbirinden farkı yok.
Rs.Open sorgu, connect, adOpenStaticDaha sonra Rs nesnesi bir veriseti idi bunun içini dolduruyoruz. Burada connect in ne olduğunu biliyorsunuz adOpenStatic ise bu verisetinin okuma işlemi yapacağımızdan kullandım. İleride farklı türde işlemlerde bunu neye göre değiştirdiğimizi de anlatmış olacağım.
Şimdi artık sorgu sonucu verimiz Rs verisetimizde duruyor bunu artık sayfaya almamız gerekiyor.
With Range("A1:AA10000")
.CopyFromRecordset Rs
End WithBen A1:AA10000 hücrelerine .CopyFromRecordset Rs diyerek bu verinin yazılmasını istediğimden bu hücre değerlerini belirttim ve veriyi bu aralığa yazdırdım.
Rs.Close
connect.Close
Son olarak ta daha önceden açtığım bağlantı ve veri setimi tekrar kapatıyorum.
Ve mutlu son. Verimiz excel e aktarılmış oldu bunu istersek bir butona da ekleyip çağırabiliriz oda size kalmış.