prosedurler hakkında

29/01/2017, 23:55

hknct

ufak çaplı bir program yapıyorum. benim öğrenmek istediğim örneğin kayıt silme, ekleme güncelleme, kayıtlar arasında gezinti için veya tekrar tekrar kullanacağıımız kodlar için  prosedur tanımlanabilir mi?

benim yaptığım programda 8-9 ttane formda tekrar tekrar bu kodları yazmak zorunda kaldım. Ustalar daha iyi bilir bu da programı gereksiz yere şişirir  diye düşünüyorum. 
 
sizin sitede farklı kelimelerle aradım. ancak bir türlü istediğim bir bilgie ulaşamadım. bu konuda yardımcı olabilirseniz sevinirim iyi çalışmalar
30/01/2017, 20:49

ozanakkaya

Merhaba, örnek uygulamanızı eklerseniz form yapınızı inceleyip isteğiniz için fikir verebiliriz.
Ayrıca ekleyeceğiniz kodlar veritabanını şişirmez.
14/02/2017, 22:07

ozanakkaya

Merhaba, sorunuz için lütfen geri bildirimde bulununuz. Modül ile istediğiniz işlem gerçekleştirilebilir ama öncelikle uygulamanızın incelenmesi gerekli,
15/02/2017, 00:24

hknct

üzerinde çalıştığım programda hemen hemen tüm formlarında kaydet,  kayıtlar arasında gezinti, silme , yeni kayıt eklemeler var. hepsine aynı kodları yazmak yerine tek bir prosedür oluşturup oradan çalıştırılabilir mi?
15/02/2017, 01:24

ozanakkaya

Merhaba, kayıt gezintisi için formun geçerli olduğunda olayındaki kod için

Modüle aşağıdaki kodu ekleyin

Public Function Test(FormAdi As String, GKayitAlani As String)
On Error GoTo Err_Form_Current
Dim frm As Access.Form
Set frm = Forms(FormAdi)
Dim recClone As Object
Dim intNewRecord As Integer
'intNewRecord = IsNull(t1)
If frm.NewRecord Then
frm.IlkKayit.Enabled = True
frm.SonrakiKayit.Enabled = False
frm.OncekiKayit.Enabled = True
frm.SonKayit.Enabled = False
frm.YeniKayit.Enabled = False
frm.KayitAlani.Enabled = True
GKayitAlani = "Yeni Kayıt"
frm.GKayitAlani.SetFocus
Exit Function
Else
frm.YeniKayit.Enabled = True
frm.SonKayit.Enabled = True
End If
Set recClone = frm.RecordsetClone
If recClone.RecordCount = 0 Then
frm.SonrakiKayit.Enabled = False
frm.OncekiKayit.Enabled = False
frm.IlkKayit.Enabled = False
SonKayit.Enabled = False
Else
recClone.Bookmark = frm.Bookmark
recClone.MovePrevious
frm.IlkKayit.Enabled = Not (recClone.BOF)
frm.OncekiKayit.Enabled = Not (recClone.BOF)
recClone.MoveNext
recClone.MoveNext
frm.SonKayit.Enabled = Not (recClone.EOF)
frm.SonrakiKayit.Enabled = Not (recClone.EOF)
recClone.MovePrevious
End If
frm(GKayitAlani) = DCount("*", frm.RecordSource) & " Kayıttan " & (recClone.AbsolutePosition + 1) & ". Kayıt"
recClone.Close
Exit_Form_Current:
Exit Function
Err_Form_Current:
If Err = 3021 Then
frm.OncekiKayit.Enabled = True
frm.IlkKayit.Enabled = True
frm.SonrakiKayit.Enabled = False
frm.SonKayit.Enabled = False
Resume Exit_Form_Current
Else
MsgBox Err.Description
Resume Exit_Form_Current
End If

End Function

Fmalzemetur isimli formun geçerli olduğunda olayındaki kodun tamamını silip yerine

Call Test(Me.Name, "KayitAlani")

Şeklinde kod ekleyin.

Önceki kod modül üzerinden çalışacak,
bu kodu benzer olan frmmalzemeadi formunda da kullanabilirsiniz, ancak farklı formda buton isimlerinin aynı olması gerekli

diğer DoCmd.GoToRecord , , acFirst şeklindeki kodlar zaten yerleşik işlev olarak kullanılıyor.

Uygulamanızdaki bu kadar az sayıda form ve tablo olmasına rağmen boyutunun 2Mbden fazla olmasının sebebi kodlar değil.
15/02/2017, 08:46

hknct

teşekkür ederim sayın ozanakkaya istediğim gibi oldu.