Makale ADO Komut Parametreleri Yöntemi ile Tablo Sorgulama veya Veri Ekleme

hakanbehcan

Yeni Üye
Katılım
23 Şub 2019
Mesajlar
1
Puanları
3
Yaş
48
Konum
Tekirdağ
Ad Soyad
Hakan BEHCAN
Bu makale ilginizi çekti ise ADO ne işe yarar biliyorsunuz demektir.
Hatta çok büyük bir ihtimal ile ado ile çalışan bir kaç uygulamanız da olmuştur.

Bugüne kadar excel formlar üzerinden ADOya sql ile veri gönderirken "sql injection" konusunda pek bir önlem almadık.
Kötü niyet ve yazdığımız metinler için ' gibi sql işaretleri olmadığı sürece sorun yok. Peki işaret olursa ne oluyor? Örneğin bir text boxa yazdığınız metine göre arama yaptığınızı düşünelim, metin içine ' karakterini yazın bakalım çalışıyor mu?

Peki çözüm ney?

O zaman parametrelerden faydalanmalıyız.

Çok fazla laf kalabalığı yapmadan örneğe geçelim.

Örnekte içinde (') gibi özel karakterler olan metin kutularından veri ekleyebilecek ve sorgulayabileceksiniz.

Musteri adında bir mdb dosyamız olsun. alanları da aşağıdaki gibi olsun

mdbRaw.JPG

İçinde de biraz veri ekleyelim.

mdbfile.JPG


Şimdi excel dosyamıza bir userfom ekleyelim ve aşağıdaki gibi düzenleyelim.
form kontrollerinin adlarını kırmızı olarak üzerinde belirtiyorum.

UFRaw.JPG


Şimdi bu yöntem de kayıtsetini open ile açıp işlem yapabilirsiniz ama ben execute metodunu seviyorum.

Sıralama değişebilse de ben aşağıdaki sıralamayı tercih ediyorum.
  • Dim ile nesneleri tanımlıyorum. Önreğin (Earlybinding yönteminde intellisense olduğu için daha kolay geliyor)
    • Dim Conn As ADODB.Connection
    • Dim Rs As ADODB.Recordset
    • Dim SqlCmd As ADODB.Comman
    • Dim Prm As ADODB.Parameter
  • SQL soru metnini oluşturuyorum.
  • Komut nesnesini oluşturup parametrelerini atıyorum.
  • Komutu çalıştırıp veriyi recordsete alıyorum.
  • Nesneleri Kapatıyorum
Kodu tamamıyla görelim.

VBA:
Sub ListMusteri()
    Set Conn = New ADODB.Connection
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\TEST.MDB"

    If Me.txtAra.Text = "*" Then
        Sorgu = "Select * from musteri"
    Else
        Sorgu = "Select * from musteri where Msoyadi=@Msoyadi;"
    End If

    Set SqlCmd = New ADODB.Command

    With SqlCmd
        .ActiveConnection = Conn
        .CommandText = Sorgu
        .CommandType = adCmdText
     End With

    Set Prm = SqlCmd.CreateParameter("@Msoyadi", adVarChar, adParamInput, 255, Me.txtAra.Text)
    SqlCmd.Parameters.Append Prm

    Set Rs = SqlCmd.Execute
    If Not Rs.EOF Then
        Me.ListBox1.Column = Rs.GetRows()
    Else
        Me.ListBox1.Clear
    End If
    Set Rs = Nothing: Set Conn = Nothing
End Sub

Private Sub CommandButton1_Click()
Call ListMusteri
End Sub


Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Me.txtAdi.Text = Me.ListBox1.Column(1) & ""
    Me.txtSoyadi.Text = Me.ListBox1.Column(2) & ""
End Sub

Private Sub txtAra_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then Call ListMusteri
End Sub

Private Sub UserForm_Initialize()
    Me.txtAra.Text = "*"
    Call ListMusteri
End Sub[

userformumuz bu şekilde görünecek.
6. sıradaki kayda dikkat edelim. Siz de benzer kayıt ekleyin ve sorgulayın.

UfWorks.JPG

Buradaki yazılanlardan faydalanıp yaparsanız öğrenmeniz için daha iyi olur.
Örnek dosyayı da ekledik, olmadı oradan bakarsınız.

Kalın sağlıcakla,

Teşekkürler.

Yazan : Hakan Behcan
 

Ekli dosyalar

Son düzenleme:
Üst Alt