Hallo Zusammen,
ich habe zwei fast gleichlautende Ereignisprozeduren. Der Unterschied ist nur das sie auf zwei unterschiedliche Abfrage zugreifen.
Für die Prozedur mit der Abfrage ,,qryArtPS" lautet der Code so:
Private Sub PA_PrüferID_AfterUpdate()
Me.Dirty = False
CurrentDb.Execute " Insert into tblPASchritte (PAS_Sollwert, PAS_Einheit, PAS_Datum, PAS_PSID, PAS_PAID) Select PS_Sollwert as PAS_Sollwert, PS_Einheit as PAS_Einheit, Date() as PAS_Datum, PSID as PAS_PSID, " & Me!PAID & " as PAS_PAID from qryArtPS Where ArtikelID = " & Me!PA_ArtikelID
Me!frmPGSchritte.Form.Requery
End Sub
Für die Prozedur mit der Abfrage ,,qryArtPSMM" lautet der Code so:
Private Sub PA_PrüferID_AfterUpdate()
Me.Dirty = False
CurrentDb.Execute " Insert into tblPASchritte (PAS_Sollwert, PAS_Einheit, PAS_Datum, PAS_PSID, PAS_PAID) Select PS_Sollwert as PAS_Sollwert, PS_Einheit as PAS_Einheit, Date() as PAS_Datum, PSID as PAS_PSID, " & Me!PAID & " as PAS_PAID from qryArtPSMM Where ArtikelID = " & Me!PA_ArtikelID
Me!frmPGSchritte.Form.RequeryEnd Sub
Nun die eigentliche Frage.
Könnte ich über die Eingabe in das Feld ,,PA_Pruef" (befindet sich im selben Formular) einer ,,1" oder einer ,,2" (erfolgt noch vor dem ausführen der Prozedur ,,Private Sub PA_PrüferID_AfterUpdate()") steuern welche Abfrage für die Prozedur zu Anwendungen kommen soll?
1= qryArtPSMM
2= qryArtPS
Über unterstützung würde ich mich wiederum sehr freuen.
Gruss
mad
Gibt es denn überhaupt einen Unterschied zwischen den Abfragen? Ins Auge springt mir keiner.
Sub DoIt(ByVal x As Byte)
Dim A As Variant
A = Array("qA", "qB")
Currentdb.Execute A(x + 1), dbFailOnError
End Sub
Danke
Ja, es gibt einen Unterschied. Jenachdem welche Abfrage verwendet wird werden entweder Prüftexte herangezogen die für die Monats- bzw. Jahresprüfung notwendig sind. Dies ist direkt aus dem Code nicht ersichtlich.
Was ich jetzt leider noch nicht verstehe, wie ich Deinen Code anwenden/einbauen muß!
Gruss
mad
Hallo Zusammen,
ich habe mir mal einen Test-Code gebastelt der über einen Botton das ausführt was ich im Prinzip erreichen möchte. Natürlich soll später der jeweilige Abfrage nicht geöffnet werden sondern im Urspünglichen Code angewandt werden.
Private Sub btnTEST_Click()
On Error GoTo Err_btnTEST_Click
Dim stDocName As String
Dim stLinkCriteria As String
If Me!PA_Pruef = 1 Then
stDocName = "qryArtPSMM"
ElseIf Me!PA_Pruef = 2 Then
stDocName = "qryArtPS"
Else
MsgBox "Bitte 1 oder 2 auswählen"
End If
DoCmd.OpenQuery stDocName, , acReadOnly
Exit_btnTEST_Click:
Exit Sub
Err_btnTEST_Click:
MsgBox Err.Description
Resume Exit_btnTEST_Click
End Sub
jetzt möchte ich eigentlich in meinem ursprünglichen Code
Private Sub PA_PrüferID_AfterUpdate()
Me.Dirty = False
CurrentDb.Execute " Insert into tblPASchritte (PAS_Sollwert, PAS_Einheit, PAS_Datum, PAS_PSID, PAS_PAID) Select PS_Sollwert as PAS_Sollwert, PS_Einheit as PAS_Einheit, Date() as PAS_Datum, PSID as PAS_PSID, " & Me!PAID & " as PAS_PAID from qryArtPS Where ArtikelID = " & Me!PA_ArtikelID
Me!frmPGSchritte.Form.Requery
End Sub
die Abfrage ...from qryArtPS Where...
durch die Codezeilen,
If Me!PA_Pruef = 1 Then
stDocName = "qryArtPSMM"
ElseIf Me!PA_Pruef = 2 Then
stDocName = "qryArtPS"
Else
MsgBox "Bitte 1 oder 2 auswählen"
End If
ersetzen.
Dann erreiche ich hoffentlich mein Ziel.
Aber wie integriere ich das in meinen ursprünglichen Code?
Gruss
mad
@mad Zunächst würde ich die Eingabe in Me!PA_Pruef direkt prüfen
Private Sub PA_Pruef_BeforeUpdate(Cancel As Integer)
If Not Isnumeric(Me!PA_Pruef)
OR Me!PA_Pruef < 1 OR Me!PA_Pruef > 2 Then
Msgbox "In diesem Feld sind nur die Zahlen 1 und 2 erlaubt!"
Cancel = True
End if
End SubDann kannst du AfterUpdate der PrüferID darauf zugreifen und die entsprechende
Abfrage ausführen
Private Sub PA_PrüferID_AfterUpdate()
Dim sQRY As String
Me.Dirty = False
Select Case Me!PA_Pruef
Case 1
sQRY = "qryArtPS"
Case 2
sQRY = "qryArtPSMM"
End Select
CurrentDb.Execute _
"Insert into tblPASchritte " & _
& "(PAS_Sollwert, PAS_Einheit, PAS_Datum, PAS_PSID, PAS_PAID) " _
& "Select PS_Sollwert as PAS_Sollwert, PS_Einheit as PAS_Einheit, Date() as PAS_Datum, PSID as PAS_PSID, " & Me!PAID & " as PAS_PAID " _
& "from " & sQRY & " Where ArtikelID = " & Me!PA_ArtikelID
Me!frmPGSchritte.Form.Requery
End Sub
Hallo,
mußte nur ein & entfernen, war zuviel und die 1bzw.2 der richtigen "qryArtPS.." zuordnen, dann hat es super funktioniert.
Vielen Herzlichen Dank für die erneute Unterstützung.
Gruss
mad