[MAKALE] - ADO ile Kolay Sorgulama

Bu konuyu okuyanlar

eSa

Müdavim
Cezalı
Katılım
5 Kasım 2011
Mesajlar
9,782
Reaksiyon puanı
352
Puanları
83
Program yazarken bazen bir tablodan bir değere başvurmak veya bir işlem yapmak için bir veriye ihtiyacımız olur. Bu gibi durumlarda hemen gerekli tanımları yapıp, tabloyu açarak veriye sorgu ile ulaşmak gerekir.

Peki bu durum kodlama esnasında sık başımıza geliyorsa ne yapmalıyız. Yazdığımız kodun daha okunaklı ve düzenli olması için bu tip tekrarlanan işlemler için Sub veya Fonksiyon oluşturmamız gerekir.

Bu makalede veritabanından sıklıkla başvurduğumuz bir takım değerlere nasıl kolay bir şekilde ulaşabileceğimizi göreceğiz.

Öncelikle projemize bağlı bir modülde bağlantımız için public değişkeni tanımlıyoruz.

Kod:
[COLOR=#0000cd]Public [/COLOR][COLOR=#000000]CNN [/COLOR][COLOR=#0000cd]As [/COLOR][COLOR=#000000]ADODB.Connection
[/COLOR]


Daha sonra projemizin ilk açılış formunda veri tabanı bağlantımızı kuruyoruz ve bu bağlantıyı program tamamen sonlanana kadar kapatmıyoruz.


Kod:
[COLOR=#0000cd]Set [/COLOR][COLOR=#000000]CNN = New ADODB.Connection
[/COLOR][COLOR=#0000cd]With [/COLOR][COLOR=#000000]CNN
    .ConnectionString = "Provider=SQLOLEDB.1;" & _
    "Data Source=" & SQLSERVER_ADI_VEYA_IP_NO & ";" & _
    "Initial Catalog=" & VERITABANI_ADI & ";" & _
    "User ID=" & "KULLANICI_ADI" & ";" & _
    "Password=" & "KULLANICI_ŞİFRESİ" & ";Persist Security Info=True;"
    .Open
[/COLOR][COLOR=#0000cd]End With[/COLOR][COLOR=#000000]
[/COLOR]


Bağlantımız hazır olduğuna göre yine projemizdeki bir modül içerisine aşağıdaki fonksiyonu yazıyoruz.
Bu fonksiyon ile her defasında aynı işlemleri yapmadan yalnızca fonksiyona parametre geçirip istediğimiz değeri alacağız.


Kod:
[COLOR=#0000cd]Function[/COLOR][COLOR=#000000] AdoSQLResult(SQL [/COLOR][COLOR=#0000cd]As String[/COLOR][COLOR=#000000], [/COLOR][COLOR=#0000cd]Optional[/COLOR][COLOR=#000000] Column [/COLOR][COLOR=#0000cd]As Long[/COLOR][COLOR=#000000])[/COLOR][COLOR=#0000cd] As String[/COLOR][COLOR=#000000]
[/COLOR][COLOR=#0000cd]On Error GoTo[/COLOR][COLOR=#000000] hta
    [/COLOR][COLOR=#0000cd]Dim [/COLOR][COLOR=#000000]rst [/COLOR][COLOR=#0000cd]As New[/COLOR][COLOR=#000000] ADODB.Recordset
    
    AdoSQLResult = ""
    rst.Open SQL, CNN, adOpenStatic, adLockReadOnly
    
    [/COLOR][COLOR=#0000cd]If[/COLOR][COLOR=#000000] rst.RecordCount > 0 [/COLOR][COLOR=#0000cd]Then[/COLOR][COLOR=#000000]
        [/COLOR][COLOR=#0000cd]If Not IsNull[/COLOR][COLOR=#000000](rst(Column)) [/COLOR][COLOR=#0000cd]Then[/COLOR][COLOR=#000000]
            AdoSQLResult = CStr(rst(Column))
       [/COLOR][COLOR=#0000cd] End If[/COLOR][COLOR=#000000]
   [/COLOR][COLOR=#0000cd] End If[/COLOR][COLOR=#000000]
    rst.Close
    [/COLOR][COLOR=#0000cd]Set[/COLOR][COLOR=#000000] rst = Nothing


[/COLOR][COLOR=#0000cd]Exit Function[/COLOR][COLOR=#000000]
hta:
    MsgBox Err.Number & ":" & Err.Description, vbCritical, Err.Number & ":Sorgulama Hatası"
[/COLOR][COLOR=#0000cd]End Function[/COLOR][COLOR=#000000]
[/COLOR]


Fonksiyonun kullanımına örnek verecek olursak;
Kod:
Text2.Text = AdoSQLResult("Select AdiSoyadi from sicil_master where SicilNo=" & Val(Text1.Text))


şeklinde Text1 kutusuna yazılan bir sicil numarasına ait kişinin adı soyadı bilgisini Text2 kutusuna kolayca yazdırabiliriz.

Fonksiyondaki parametrelerdeki Optional Column parametresi ise sorgu sonucunda tek değer değil de, birden fazla kolon geliyor ise istediğimiz kolonun numarasını girerek değerimize ulaşabiliriz.

Örneğin sorgumuz;
Kod:
"Select * from sicil_master where sicil_no=" & val(text1.text)
şeklinde olsaydı.Bu durumda elimizde tek bir değer değil bir kayıt seti olacaktı. Sonucu bir gride listeleseydik, kolon başlıkları sicilno,adisoyadi,bolum,kisim,vardiya,.... şeklinde olacaktı. Biz bu tip bir sorgudan bolumu elde etmek istersek, fonksiyona gönderilecek parametre şu şekilde olacaktı.


Kod:
Text2.Text = AdoSQLResult("Select * from sicil_master where sicil_no=" & val(text1.text) , 2 )


Peki programımız aynı anda iki ayrı veritabanına bağlanıyor ise bu durumda her iki veritabanından sorgulamalar için ayrı ayrı iki fonksiyon mu yazacağız? Tabiki hayır. Bu durumda yine yazım kolaylığı ve kodun okunabilirliği için. Bir public enum tanımlayacağız.


Kod:
[COLOR=#0000cd]Public Enum[/COLOR][COLOR=#000000] cnn_tip
    [Personel]
    [Stok]
[/COLOR][COLOR=#0000cd]End Enum[/COLOR][COLOR=#000000]
[/COLOR]


Fonksiyonumuzdaki değişiklik te şu şekilde olacaktır.

Kod:
[COLOR=#0000cd]Function[/COLOR][COLOR=#000000] AdoSQLResult(SQL [/COLOR][COLOR=#0000cd]As String[/COLOR][COLOR=#000000], Baglanti [/COLOR][COLOR=#0000cd]As[/COLOR][COLOR=#000000] cnn_tip, [/COLOR][COLOR=#0000cd]Optional [/COLOR][COLOR=#000000]Column [/COLOR][COLOR=#0000cd]As Long[/COLOR][COLOR=#000000]) [/COLOR][COLOR=#0000cd]As String[/COLOR][COLOR=#000000]
[/COLOR][COLOR=#0000cd]On ErrorGoTo[/COLOR][COLOR=#000000] hta
    [/COLOR][COLOR=#0000cd]Dim [/COLOR][COLOR=#000000]rst [/COLOR][COLOR=#0000cd]As New[/COLOR][COLOR=#000000] ADODB.Recordset
    
    AdoSQLResult = ""

   [/COLOR][COLOR=#0000cd] Select Case[/COLOR][COLOR=#000000] Baglanti
    [/COLOR][COLOR=#0000cd]Case[/COLOR][COLOR=#000000] 0
        rst.Open SQL, CNN, adOpenStatic, adLockReadOnly
    [/COLOR][COLOR=#0000cd]Case[/COLOR][COLOR=#000000] 1
        rst.Open SQL, CNN2, adOpenStatic, adLockReadOnly
    [/COLOR][COLOR=#0000cd]End Select[/COLOR][COLOR=#000000]
    
    [/COLOR][COLOR=#0000cd]If[/COLOR][COLOR=#000000] rst.RecordCount > 0 [/COLOR][COLOR=#0000cd]Then[/COLOR][COLOR=#000000]
        [/COLOR][COLOR=#0000cd]If NotIsNull[/COLOR][COLOR=#000000](rst(Column)) [/COLOR][COLOR=#0000cd]Then[/COLOR][COLOR=#000000]
            AdoSQLResult = CStr(rst(Column))
        [/COLOR][COLOR=#0000cd]End If[/COLOR][COLOR=#000000]
    [/COLOR][COLOR=#0000cd]End If[/COLOR][COLOR=#000000]
    rst.Close
    [/COLOR][COLOR=#0000cd]Set [/COLOR][COLOR=#000000]rst = Nothing


[/COLOR][COLOR=#0000cd]Exit Function[/COLOR][COLOR=#000000]
hta:
    MsgBox Err.Number & ":" & Err.Description, vbCritical, Err.Number & ":Sorgulama Hatası"
[/COLOR][COLOR=#0000cd]End Function[/COLOR][COLOR=#000000]
[/COLOR]


bu şekilde kullanıma da örnek vermek gerekirse
Kod:
Text2.Text = AdoSQLResult("Select AdiSoyadi from sicil_master where SicilNo=" & Val(Text1.Text),Personel)


Bu makalede kullanılan programlar : Visual Basic 6.0




Bir sonraki makalede görüşmek üzere..


eSa
 
Üst