Hoş Geldin, Mühendis!

Tüm mühendislerin ve mühendis adaylarının yer aldığı forum sayfamıza kayıt olmalısınız. Kayıt olduktan sonra tüm ders notlarına, teknik dokümanlara erişim sağlayabilecek, sorularınızı sorup cevaplar verebileceksiniz. Sitemiz tamamiyle ücretsiz olmakla birlikte Mühendis Puanı sistemi uygulamaktadır.

Bilgi paylaştıkça çoğalır.

Premium Abonelik 📢

Premium abonelik ile sitemizi reklamsız gezebilir, dosyaları sınırsızca indirebilirsiniz.

Daha Fazlası

[Muhendisiz.NET] Tekrar Sizlerleyiz! 🎭

Mühendisiz.NET sitesi forum ve blog sayfası olarak tekrar yayın hayatına başladı. 🤩 Sizlerde forum sayfamıza üye olabilir ve mühendis topluluğumuza katılabilirsiniz.

Daha Fazlası

Mühendis Puanı Sistemi🏆

Bilgi paylaştıkça çoğalır felsefesini benimsemiş olmamız nedeniyle Mühendis Puanı sistemini uygulamaya aldık. Dökümanları indirebilmek için bazı paylaşımlarda bulunmalısınız. 📨

Daha Fazlası
  • Dosya indirebilmek için 2 Mühendis Puanına ihtiyacınız var. Konuya yorum atarak 1 MP Not paylaşarak 6 MP kazanırsınız.
    Bilgi Paylaştıkça Çoğalır. (Mühendislik Puanı (MP) Nedir?)
  • Mühendis Puanı kazanmaya vakti olmayanlar için ücretli premium üyelik sistemi aktif edilmiştir.
    (Premium Üyelik SATIN AL)

ADO & SQL ile Kapalı Dosyadan Veri Alma

turkmedia

Moderatör
Katılım
8 Ara 2022
Mesajlar
760
Mühendis Puanı
1,612
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 !
 

Son kaynaklar