Access Kod birleştirme İki ayrı tablo denetleme

02/02/2009, 13:10

Puletin

Merhabalar arkadaşlar..
Sorun şu Alt form üzerinden ceza girişi yapılmaktadır.
Girilen ceza maddeleri ise tblİPTALMADDELERİ ve tblMENNEDENLERİ adlı iki tablodan denetlenerek bu tablolarda olan maddeler varsa bana uyarı vererek gereken tablolara ayrıca altform üzerinden kayıt yapılmaktadır.
Ancak Kodlar da da göreceğiniz üzere sadece birini denetlemekte diğerini es geçiyor.
Or işlecini kullanmayı denedim ozaman ikisine de uyarı veriyor ancak sadece bir tabloya kayıt giriyor.Ben uyarı hangi yönde ise o tabloya kayıt yapmak istiyorum...
Şuan sadece tblİPTALMADDELERİ ni denetliyor tblMENNEDENLERİ ni denetlemiyor...

İnşallah anlata bilmişimdir...
02/02/2009, 14:23

Seruz

Bu şekilde deneyin;
Önce tblİPTALMADDELERİ kontrol ediliyor ve varsa sorularak yazılıyor.
Sonra tblMENNEDENLERİ kontrol ediliyor ve varsa sorularak yazılıyor.

Kod:
Private Sub Maddesi_AfterUpdate()
TL = DLookup("[Miktarı]", "tblMADDELER", "[Maddesi]='" & Me.Maddesi & "'")
Puani = DLookup("[Puanı]", "tblMADDELER", "[Maddesi]='" & Me.Maddesi & "'")

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Dim SD, C As String
Dim stringCliteria As String

SD = Me.Maddesi.Value

stringCliteria = "[Maddesi]=" & "'" & SD & "'"

If DCount("*", "tblİPTALMADDELERİ", "Maddesi='" & Me.Maddesi & "'") > 0 Then
    C = MsgBox("DİKKKAT *" & SD & " * ADINDA *" & vbCr & " DEVAM ", vbYesNo + _
        vbQuestion, "DİKKAT")
    If C = vbYes Then
        DoCmd.RunSQL _
            "insert into tblBELGEİPTAL SELECT * from tblVERİLER where (tblVERİLER.Ceza_ID=Forms![frmCEZALAR]![frmCEZAGİR].form.[Ceza_ID])"
        MsgBox "İPTAL KAYDI YAPILDI"
    End If
End If

If DCount("*", "tblMENNEDENLERİ", "Maddesi='" & Me.Maddesi & "'") > 0 Then
    C = MsgBox("DİKKKAT *" & SD & " * ADINDA *" & vbCr & " DEVAM ", vbYesNo + _
        vbQuestion, "DİKKAT")
    If C = vbYes Then
        DoCmd.RunSQL _
            "insert into tblARACMEN SELECT * from tblVERİLER where (tblVERİLER.Ceza_ID=Forms![frmCEZALAR]![frmCEZAGİR].form.[Ceza_ID])"
        MsgBox "KAYIT YAPILDI"
    End If
End If
End Sub

Eğer siz önce tblİPTALMADDELERİ ni kontrol etsin ve varsa sorularak yazsın, yoksa gidip tblMENNEDENLERİ ni kontrol etsin istiyorsanız,
aşağıdaki şekilde yapın.

Kod:
Private Sub Maddesi_AfterUpdate()
TL = DLookup("[Miktarı]", "tblMADDELER", "[Maddesi]='" & Me.Maddesi & "'")
Puani = DLookup("[Puanı]", "tblMADDELER", "[Maddesi]='" & Me.Maddesi & "'")

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Dim SD, C As String
Dim stringCliteria As String

SD = Me.Maddesi.Value

stringCliteria = "[Maddesi]=" & "'" & SD & "'"

If DCount("*", "tblİPTALMADDELERİ", "Maddesi='" & Me.Maddesi & "'") > 0 Then
    C = MsgBox("DİKKKAT *" & SD & " * ADINDA *" & vbCr & " DEVAM ", vbYesNo + _
        vbQuestion, "DİKKAT")
    If C = vbYes Then
        DoCmd.RunSQL _
            "insert into tblBELGEİPTAL SELECT * from tblVERİLER where (tblVERİLER.Ceza_ID=Forms![frmCEZALAR]![frmCEZAGİR].form.[Ceza_ID])"
        MsgBox "İPTAL KAYDI YAPILDI"
    End If
Else
    If DCount("*", "tblMENNEDENLERİ", "Maddesi='" & Me.Maddesi & "'") > 0 Then
        C = MsgBox("DİKKKAT *" & SD & " * ADINDA *" & vbCr & " DEVAM ", vbYesNo + _
            vbQuestion, "DİKKAT")
        If C = vbYes Then
            DoCmd.RunSQL _
                "insert into tblARACMEN SELECT * from tblVERİLER where (tblVERİLER.Ceza_ID=Forms![frmCEZALAR]![frmCEZAGİR].form.[Ceza_ID])"
            MsgBox "KAYIT YAPILDI"
        End If
    End If
End If
End Sub
02/02/2009, 14:35

Puletin

Sayın Seruz hocam , ilginiz için çok çok teşekkürler
İkiside işimi görüyor..
İki gündür uğraşıyordum..
Anladığım kadarı ile benim hatam "End if" olayını yanlış yerde kullanmamdan kaynaklanmış galiba..

Hocam birde Alt forma veri girişini 3 adet le sınırlama yapa bilirmiyiz.
Herceza için maksimumu 3 adet giriş olacak şekilde

Tekrar teşekkürler
02/02/2009, 15:38

mehmetdemiral

Alt forma metin15 adında bir metin kutusu ekledim. Bu metin kutusuna
Kod:
=say(Ceza_ID)
yazarak alt formdaki toplamı aldım. Ve bu formun geçerli olduğunda olayına aşağıdaki kodları yazdım:

Kod:
If Metin15 >= 3 Then
Me.Ceza_ID.Locked = True
Me.Türü.Locked = True
Me.Maddesi.Locked = True
Me.TL.Locked = True
Me.Puani.Locked = True


Else

Me.Ceza_ID.Locked = False
Me.Türü.Locked = False
Me.Maddesi.Locked = False
Me.TL.Locked = False
Me.Puani.Locked = False

End If

Böylece metin15=3 veya daha fazlası olursa veri girişi kitlenmiş oluyor. Tabii çok basit bir yöntem ama geliştirebilirsiniz.

Kolay gelsin.. Örneği de ekledim..
Bu arada eğer kodu şu şekle dönüştürürseniz

Kod:
Form.AllowAdditions = False
Form.AllowDeletions = False
Form.AllowEdits = False

o zaman da teker teker değil topyekün olarak forma yeni kayıt eklemek, silmek veya düzenlemek mümkün olmayacaktır. Ama mesela düzenleme yapmak istersiniz ama yeni eklenmesin ve silinmesin isterseniz son satırı kullanmayın. İlk satır yeni kayıt ortadaki satır ise silme içindir.

Kolay gelsin.
02/02/2009, 16:03

Puletin

Teşekkür Ediyorum Sayın mehmetdemiral ...
Elinize sağlık.....
02/02/2009, 16:49

mehmetdemiral

Rica ederim. Benim için zevkti..