Skip to main content

AccessTr.neT


Parametreli sorguyu VBA içinden çalıştırmak

WiniFred
WiniFred
5
7263

Parametreli sorguyu VBA içinden çalıştırmak

#1
Merhaba,
Bunu daha önce ben forumda sormuştum. Cevap sorguyu Vba içine almak yöntemi olarak gelmişti. Şimdi bir kez daha ihtiyacım oldu ve biraz daha araştırınca çözümü buldum.

Diyelim ki bir sorgu hazırladınız. Bu sorgu bir formdan parametre alıyor. Bu sorguyu Vba içine almakla uğraşmak istemiyorsunuz ama Vba içinden çalıştırmak istiyorsunuz. Bildiğimiz yöntemlerle yapınca, yani

Set rs=CurrentDb.OpenRecordset("Sorgu")

yöntemiyle yapınca Çok az parametre.1 bekleniyor gibi bir hata veriyor.

Parametreli sorguları Vba içinden çalıştırmak için şöyle bir yöntem izlemek gerekiyormuş:

Private Sub YardimTuru_Change()
Dim qdf As QueryDef
Dim rs As Recordset

On Error GoTo hata

Set qdf = CurrentDb.QueryDefs("AyrilisYardimiHesaplamaSorgusu")

qdf![Forms!GenelForm!Sicil] = Forms![GenelForm]![Sicil]

Set rs = qdf.OpenRecordset()

YardimTutari = rs("Net Ödenen")

rs.Close
Set rs = Nothing

qdf.Close
Set qdf=Nothing

Exit Sub

hata:
MsgBox "HATA OLUŞTU!-" & Err.Number & "-" & Err.Description, vbCritical, "Hata"

End Sub
İhtiyacı olanlar için eklemek istedim.
Saygılarımla...

Edit:
Bir örnek ekledim. umarım anlaşılır olmuştur.
.rar QuerydefOrnek.rar (Dosya Boyutu: 17,22 KB | İndirme Sayısı: 104)
Son Düzenleme: 22/11/2011, 21:35, Düzenleyen: WiniFred.
Cevapla
#2
Paylaşım için teşekkürler. Konu Access Dersleri bölümüne taşınmıştır.
Cevapla
#3
Yukarıdaki mesajımdaki Vba koduna aşağıdaki kodu ekleyerek güncelledim.

qdf.Close
Set qdf=Nothing
Cevapla
#4
paylaşım için çok teşekkürler
Cevapla
#5
İlk mesajımda access'te hazırladığımız bir parametreli SELECT sorgusunu Vba içinde recordsete nasıl alabileceğimiz konusunda örnek vermiştim.

Şimdi ise access'te hazırladığımız parametreli INSERT, UPDATE veya DELETE sorgularını Vba içinden nasıl çalıştırabileceğimizi buldum ve paylaşmak istedim (forumda daha önce paylaşıldıysa bu mesajım silinebilir).

Bu şekilde yapılırsa, sorguların ileride daha kolay incelenip düzenlenebilme ihtimali var. İhtimal diyorum çünkü biliyorsunuz access'te hazırlanan sorguların okunabilirliği sıkıntılı oluyor. Uzun ve karmaşık bir sorguysa içinden çıkmak çok zor olabiliyor.

sonuçta yeni bir yöntem öğrenmenin zararı yok, kim hangi yöntemi isterse onu kullanır  Shy

Ben örneği INSERT sorgusuyla hazırladım ama tabii ki UPDATE ve DELETE sorguları da aynı şekilde çalıştırılabiliyor. Kodumuz şöyle:


Kod:
Private Sub btnKayitEkle_Click()

Dim EtkilenenKayitSayisi As Integer
On Error GoTo hata

   With CurrentDb.QueryDefs("InsertBilgiBankasiKayitEklemeSorgusu")
        .Parameters("ParamSicil") = Me.txtSicil
        .Parameters("ParamAdi") = Me.txtAdi
        .Parameters("ParamSoyadi") = Me.txtSoyadi
        .Parameters("ParamDogumTarihi") = Format(Me.txtDogumTarihi, "mm/dd/yyyy")
        .Parameters("ParamDogumYeri") = Me.txtDogumYeri
        .Execute
        EtkilenenKayitSayisi = .RecordsAffected
   End With

   MsgBox EtkilenenKayitSayisi & " adet kayıt Bilgi Bankası tablosuna eklendi.", vbInformation, "İşlem Tamam"


Exit Sub

hata:
   MsgBox "HATA OLUŞTU-" & Err.Number & "-" & Err.Description, vbCritical, "Hata"

End Sub

Burada RecordsAffected deyimi etkilenen kayıt sayısını döndürüyor. Yani bir UPDATE sorgusunda kaç kayıt güncellendi, DELETE sorgusunda kaç kayıt silindi, INSERT sorgusunda kaç kayıt eklendi ise, ayrıca hesap yapmadan otomatik olarak buradan alabiliyoruz sayıyı.

Saygılarımla...
.rar VBAParametreliSorguOrnekAccess2010.rar (Dosya Boyutu: 25,46 KB | İndirme Sayısı: 42)
Cevapla
#6
ilk mesajınınz da bulunan örneğinizi bende kullandım fakat form içerisinde çalışıtırılan (içiçe form) alt formdan bir değer eşitliyerek benzer olanları çağır deyince aynı hatayı alıyorum alt formdan sorgu çalıştırmak için örneğiniz varmı
https://accesstr.net/konu-set-qdf-curren...yorum.html
Değişimde gelişimde beyinlerin değişmesi ve gelişmesi ile olur. By Bibib
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task