Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: mad am August 02, 2020, 14:37:30

Titel: Bestimmte Abfrage zur Prozedur verwenden
Beitrag von: mad am August 02, 2020, 14:37:30
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.Requery
End 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
Titel: Re: Bestimmte Abfrage zur Prozedur verwenden
Beitrag von: ebs17 am August 02, 2020, 15:01:51
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
Titel: Re: Bestimmte Abfrage zur Prozedur verwenden
Beitrag von: mad am August 02, 2020, 16:23:44
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
Titel: Re: Bestimmte Abfrage zur Prozedur verwenden
Beitrag von: mad am August 04, 2020, 00:42:33
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
Titel: Re: Bestimmte Abfrage zur Prozedur verwenden
Beitrag von: Beaker s.a. am August 04, 2020, 16:43:46
@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 Sub
Dann 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
Titel: Re: Bestimmte Abfrage zur Prozedur verwenden
Beitrag von: mad am August 05, 2020, 15:55:15
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