Forum

ADO & SQL ile K...
 
Bildirimler
Hepsini Temizle

ADO & SQL ile Kapalı Dosyadan Veri Alma

4 Yazılar
3 Üyeler
0 Reactions
6,556 Görüntüleme
(@Anonim)
Gönderiler: 0
Konu başlatıcı
 
[#405699]

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]


 
Gönderildi : 16/11/2013 21:26
(@riza-sahan)
Gönderiler: 18017
_
 

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ş: