VBA - Excel ile SQL
SQL, veritabanından bilgi okumak, veritabanına bilgi yazmak veya bilgiyi değiştirmek amacıyla kullanılan standart bir dildir. SQL öğrenmek için ilk aşamada SQL server kurmanıza gerek yok, sadece Excel kullanarak bu konuya giriş yapabilirsiniz.
ADO bileşeni ile Excel'den MSSQL server, MSACCESS veya Excel sayfasına bağlantı kurabilirsiniz. VBA kodunda sadece bağlantı bilgisini (connection string) içeren satırı değiştirmeniz yeterli olacaktır.
MSSQL server için bağlantı bilgisi :
connectionString = "Driver={SQL Server};Server=servername;Database=databasename;Uid=sa;Pwd=password;"
Alt+F11 ile ulaştığımız VBA kod sayfasında Tools > References bölümünde Microsoft ADO Library kütüphanesini seçmeniz gerekiyor..
Örnek .xlsm uzantılı dosyayı buradan indirebilirsiniz.. Dosyayı açarsanız Security Risk uyarısı verecek ve VBA kodu çalışmayacaktır. Sağ klik ile dosya özelliklerine tıklayın ve resimdeki gibi en altta bulunan kutucuğu işaretleyin, ardından tamam butonuna tıklayın.
SELECT FOOD, FOODID FROM [GIDA$] WHERE CALORIES > 900
Bu sorgu sonucu SONUC sayfasında gösterilecektir. SELECT komutundan sonra * yazınca tüm kolonlar gelir, FOOD, FOODID yazınca sadece iki kolon gelecek, listelenen yiyeceklerin kalorisi 900 üzerinde olacaktır..
Dosya açılınca sorgulama formu gözükecektir, formun dosya açılınca açılmasını sağlayan kod, kodlama penceresinde ThisWorkbook içinde bulunmaktadır..
Artık aşağıdaki SELECT sorgularını formu kullanarak yapabilirsiniz.
SELECT DISTINCT FOODTYPE FROM [GIDA$]
SELECT COUNT(*) AS ROW_COUNT FROM [GIDA$] WHERE FOODTYPE = 'BEVERAGES'
SELECT * FROM [GIDA$] WHERE FOODTYPE = 'BEVERAGES'
SELECT * FROM [GIDA$] WHERE FOODTYPE = 'BEVERAGES' AND CALORIES > 450
SELECT * FROM [GIDA$] WHERE FOODTYPE LIKE '%PASTA%' ORDER BY FOOD DESC
SELECT * FROM [GIDA$] WHERE FOODTYPE LIKE '_ER%'
SELECT FOODTYPE, AVG(CALORIES) AS AVG_CALORIES FROM [GIDA$] GROUP BY FOODTYPE
SELECT FOOD, FOODID FROM [GIDA$] WHERE CALORIES > 900
SELECT NOW()
SELECT 'TODAY IS ' + CSTR(DATE())
SELECT YEAR(DATE()) AS YIL
SELECT DATEPART('M', #25-6-1993#) AS AY
Tarih ile ilgili komutlar Excel ve SQL server için farklı gözüküyor.. Bu komutlar örneğin SQLite veya MySQL için de farklılık gösterecektir. Yukarıdaki tarihle ilgili olmayan SELECT sorguları ise her tip SQL ortamında çalışacaktır..
MSSQL server basit kurulumu ve temel sql komutlarının anlatıldığı bu youtube videosunu izlemenizi tavsiye ederim.
SQL ile ilgili daha detaylı VBA kodlama bilgileri öğrenmek isterseniz, linkteki youtube playlist işinize yarayacaktır..
Yorumlar
Yorum Gönder