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
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?
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.
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
.
.
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
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.