Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: ToBu am Mai 16, 2020, 13:01:52

Titel: TabellenErstellungsAbfrage mit variablem numerischem Kriterium
Beitrag von: ToBu am Mai 16, 2020, 13:01:52
Leider kenne ich nicht die richtige Syntax für SQL-Code zu o.a. Vorhaben!
Was ist falsch an:
Privat Sub...
Dim db as DAO.Database
Dim rs as Recordset
Dim MitgliedNr as Long
...

strSQL0 = "SELECT MitgliederStamm.MitglNr INTO Zwischenspeicherung FROM MitgliederStamm WHERE (MitgliederStamm.MitglNr = MitgliedNr)"
                 
                 CurrentDb.Execute strSQL0
Fehlermeldung: Es wurden 1 Parameter erwartet. Zu wenige übergeben oder so ähnlich!
CurrentDb.Execute strSQL0 ist gelb hinterlegt!

Kann mir jemand den richtigen Code schreiben?
Vielen Dank!
Gruß ToBu
Titel: Re: TabellenErstellungsAbfrage mit variablem numerischem Kriterium
Beitrag von: DF6GL am Mai 16, 2020, 13:28:47
Hallo,

Mitgliednr ist eine VBA-Variable und in einem SQL-Statement nicht direkt bekannt. Sie muss ausgelagert werden:

strSQL0 = "SELECT MitgliederStamm.MitglNr INTO Zwischenspeicherung FROM MitgliederStamm WHERE (MitgliederStamm.MitglNr = " & MitgliedNr & ")"


Was soll dieser Code, bzw. diese Tabellenerstellungsabfrage überhaupt bezwecken?
Titel: Re: TabellenErstellungsAbfrage mit variablem numerischem Kriterium
Beitrag von: ToBu am Mai 16, 2020, 16:04:33
Hallo Franz,
vielen Dank für den richtigen Code! Jetzt läuft es so, wie von mir gewünscht!
Mit deiner Frage triffst du natürlich ins Schwarze! Diese umständliche TEA basiert auf meinen geringen VBA-Kenntnissen!
Hintergrund ist, dass Es einen Bericht gibt, der alle Seiten nach MitglNr. sortiert in Seitenansicht bringt. Da dies aber sensible Seiten sind die ausschließlich für die jeweilige MitglNr gedacht ist, musste ich mir so behelfen. Das funktioniert jetzt auch gut. Aber es gibt sicherlich einen diesbezüglichen Code, der den Bericht als Einzelseiten in PDF druckt. Mir ist es bisher nicht gelungen, ein Kriterium " MitgliedNr" in den Berichtsdruck zu integrieren.
Z.Zt. sieht das bei mir so aus:
strSQL = "SELECT AktuelleMitglieder.MitglNr FROM AktuelleMitglieder"
   Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
   Do Until rs.EOF
       MitgliedNr = rs!MitglNr
       PDFDateiName = MitgliedNr & "_Konfektion_Tücher_" & ZeitraumBez & ".pdf"
       PfadName = Pfad & "\" & PDFDateiName
       
       DoCmd.DeleteObject acTable, "Zwischenspeicherung"
       
       strSQL0 = "SELECT MitgliederStamm.MitglNr INTO Zwischenspeicherung FROM MitgliederStamm WHERE (MitgliederStamm.MitglNr = " & MitgliedNr & ")"
                  CurrentDb.Execute strSQL0
     
       PfadName = Pfad & "\" & PDFDateiName
     
       reportName = "Tuchstatistik_Jahresvergleich_mit Unterbericht"
       DoCmd.OpenReport reportName, acViewPreview, acHidden
       DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, PfadName
       DoCmd.Close acReport, reportName, acSaveNo
   rs.MoveNext
   Loop
   rs.Close

Oder kann ich diesen strSQL0-Code als criteria in den Befehl
DoCmd.OpenReport reportName, acViewPreview, acHidden

einbauen? Oder wie könnte das gehen?
Viele Grüße
Thomas.
Titel: Re: TabellenErstellungsAbfrage mit variablem numerischem Kriterium
Beitrag von: DF6GL am Mai 16, 2020, 16:37:10
Hallo,

es sollte reichen:
.
.
Do Until rs.EOF
       MitgliedNr = rs!MitglNr
       PDFDateiName = MitgliedNr & "_Konfektion_Tücher_" & ZeitraumBez & ".pdf"
       PfadName = Pfad & "\" & PDFDateiName
       
       reportName = "Tuchstatistik_Jahresvergleich_mit Unterbericht"
       DoCmd.OpenReport reportName, acViewPreview, , "MitglNr = " & MitgliedNr
       DoCmd.OutputTo acOutputReport, , acFormatPDF, PfadName
       DoCmd.Close acReport, reportName, acSaveNo
   rs.MoveNext
   Loop
.
.
Titel: Re: TabellenErstellungsAbfrage mit variablem numerischem Kriterium
Beitrag von: ToBu am Mai 17, 2020, 12:50:04
Hallo Franz,
ja, gewusst wie... Das klappt ja wirklich prima! Habe alles entsprechend geändert und bin in dieser Sache jetzt hoch zufrieden! Besten Dank für deine professionelle Hilfe!
Ich habe allerdings noch 1 Schönheitsfehler drin. Beim Abspeichern der PDF-Dateien wollte ich prüfen, ob ein entsprechender Ordner im Pfad bereits vorhanden ist. Dafür schrieb ich folgendes:
If Dir(Pfad, vbDirectory) <> Null Then
      MsgBox "Das Verzeichnis existiert bereits!"
Else
      MkDir Pfad
      MsgBox "Verzeichnis erstellt."
End If

Den Else-Zweig macht es prima. Aber beim Then nachfolgend (Ordner besteht bereits) kommt ein Zeitfehler!
Mir fehlt wieder einmal die richtige Syntax.
Kannst du bitte mir auch hier helfen?
Besten Dank und viele Grüße,
Thomas
Titel: Re: TabellenErstellungsAbfrage mit variablem numerischem Kriterium
Beitrag von: DF6GL am Mai 17, 2020, 13:19:02
Hallo,

If Dir(Pfad, vbDirectory) <> ""


Auf "NULL" zu vergleichen, ist grundsätzlich sinnlos. Dafür gibt es die IsNull()-Funktion, bzw. die NZ()-Funktion, falls man dies benötigt.