Forum

ADO & SQL ile K...
 
Bildirimler
Hepsini Temizle

ADO & SQL ile Kapalı Dosyadan Veri Alma

4 Yazılar
3 Üyeler
0 Reactions
5,134 Görüntüleme
(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

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 ObjectRs As ObjectSorgu 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 SorguCon11
        Range
("A1").CopyFromRecordset Rs
        Rs
.CloseCon.Close
    Set Con 
NothingSet Rs NothingSorgu ""
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 ObjectRs As ObjectSorgu 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 SorguCon11

■ 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.CloseCon.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 NothingSet Rs NothingSorgu ""

■ 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]

 
Gönderildi : 16/11/2013 21:26

(@riza-sahan)
Gönderiler: 18032
_
 

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.

 
Gönderildi : 17/11/2013 00:16

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Faydalı olması dileğiyle. 

 
Gönderildi : 17/11/2013 01:22

(@MuharremGUL)
Gönderiler: 1
New Member
 

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.

 
Gönderildi : 09/06/2018 19:38

Paylaş: