Hallo,
ich habe folgendes Problem.
Mit Hilfe eines VBA_Codes generiere ich einen SQL-String.
Dieser wird als Abfrage angelegt.
Im VBA_Code soll nun ein Feld dabei "berechnet" werden.
Diese Berechnung habe ich nach WHERE eingefügt.
Und genau diesen zu berechnenden Teil macht er nicht.
Garage.Gar_AbrMonat = DateDiff((m; Garage.Gar_DatumAb; Garage.Gar_DatumBis) + 1)
Lösche ich das raus - funktioniert der Code.
Dann fehlt mir aber die Berechnung.
Als Fehler kommt immer: "Syntaxsfehler im Abfrageausdruck (Laufzeitfehler 3075)"
Wer kann mir hier helfen?
Public Sub Abfrage_Zeitraum(ByVal von As String, ByVal bis As String)
Dim rs As QueryDef
Dim m As String
Set rs = CurrentDb.QueryDefs("UmsatzZeitraum")
rs.SQL = "SELECT Garage.Gar_DatumAb, Garage.Gar_DatumBis, Garage.Gar_Nr, Garage.Gar_Miet_Nr, Mieter.Miet_Name, Mieter.Miet_Vorname, Garage.Gar_Status, Pachtvertrag.Pacht_Miet_Nr, Pachtvertrag.Pacht_Monat, Pachtvertrag.Pacht_Quartal, Pachtvertrag.Pacht_Jahr, Garage.Gar_AbrMonat, Pachtvertrag.Pacht_AbrJahr FROM Garage INNER JOIN ( Mieter INNER JOIN Pachtvertrag ON Mieter.Miet_Nr = Pachtvertrag.Pacht_Miet_Nr ) ON Mieter.Miet_Nr = Garage.Gar_Miet_Nr "
rs.SQL = rs.SQL & "WHERE Garage.Gar_AbrMonat = DateDiff((m; Garage.Gar_DatumAb; Garage.Gar_DatumBis) + 1) AND Garage.Gar_Status = True AND Garage.Gar_DatumAb BETWEEN " & fcDatSQL(von) & " AND " & fcDatSQL(bis) & " ORDER BY Garage.Gar_Nr ;"
Set rs = Nothing
End Sub
"," statt ";" bei DateDiff
Hallo beaker,
das habe ich auch schon probiert, das funktioniert nicht.
Ich habe schon die Semikolon durch Komma ersetzt. Ich habe schon einmal Klammern bei DateDiff zusätzlich gesetzt.
Bisher kommt immer dieser genannte Laufzeitfehler.
Hallo,
wird eine Zeile markiert für den Fehler, wenn ja, welche ?
Zitat"," statt ";" bei DateDiff
Das würde ich wiederholen. SQL und VBA sprechen englisch.
Zusätzlich wird das pure m nicht auswertbar sein. Mit einschließenden Hochkommata würde es zum erwarteten Argument für die Funktion.
Zitatdas habe ich auch schon probiert, das funktioniert nicht
Wer wird denn dem Glauben unterliegen, nur einen Fehler produziert zu haben?
Selbst diese Hinweise beanspruchen nicht für sich Vollständigkeit, sie fallen nur ins Auge.
Der Stil der Zusammensetzung der SQL-Anweisung ist ungewöhnlich. Üblicherweise würde man die in einer Stringvariablen zusammensetzen und das Fertigprodukt als Definition an die gespeicherte Abfrage übergeben. Da hat man nebenbei auch viel bessere Möglichkeiten zu testen.
Hallo Klaus,
beim Fehler wird die Zeile markiert, in der die DateDiff-Berechnung steht.
Ich hatte das m auch schon mit "m" probiert. Einfache Anstriche 'm' probiere ich aus.
Hallo,
--für was wird "Dim m As String" gebraucht?
-- ein Datum als String zu deklarieren ist ebenso ungewöhnlich, auch wenn eine nicht bekannte Funktion die Konvertierung in ein nutzbares Format vornimmt.
Das mit Dim m As String war ein Versuch. Wie kann ich es besser machen - so dass es funktioniert?
Ich habe an sich kaum VBA Kenntnisse. In versuche immer Code, den ich im Netz gefunden habe, auf meine DB anzuwenden.
Hallo,
was soll denn die Abfrage zeigen ?
Die Abfrage soll anzeigen, unter anderem wie viele Monate im Jahr eine Garage benutzt wurde (Berechnung) um dann im Formular bzw. Bericht auszuweisen wie viel Pacht eingenommen wurde.
Hallo,
ZitatDie Abfrage soll anzeigen, unter anderem wie viele Monate im Jahr eine Garage benutzt wurde (Berechnung)
Das gehört doch dann nicht in die Where Klause. Das ist ein einfaches berechnetes Feld.
DateDiff((m; Gar_DatumAb; Gar_DatumBis) + 1 As MonateBenutztKommagtrennt in die Feldlist. Aus der Wherklausel muss das komplett raus.
Das habe ich schon probiert. Das funktioniert auch. Ich brauche den Wert dann im Formular oder Bericht zur Weiterberechnung. Pacht_Monat * Gar_AbrMonat = Pachtpreis pro genutzter Monate. Das funktioniert auch über die Steuerelementzuweisung im Formular. Aber dann kommt mein Hauptproblem. Ich habe im Formular oder Bericht ein ungebundenes Textfeld, was dann die Summe auswerfen soll von allen Pächtern und deren Pachtpreis pro genutzter Monate. Das klappt aber mit Summe nicht und mit DomSumme nicht, da die berechneten Werte nicht in einer Tabelle stehen. Aber DateDiff in der Tabelle als berechnetes Feld klappt auch nicht. Wie könnte Ichs lösen?
Hallo,
es fehlen nach wie vor Gänsefüße um das Intervall-Argument und Komma anstelle Semikolon, wenn es im SQL-String (SQL-Ansicht) steht:
ZitatDateDiff(("m", Gar_DatumAb, Gar_DatumBis) + 1 As MonateBenutzt
Hallo,
gelesen, gesehen und dann doch falsch kopiert. Da ärgere ich mich jetzt aber über mich selbst.
Hi,
ZitatDa ärgere ich mich jetzt aber über mich selbst.
das würde ich nicht tun, das gibt nur graue Haare.
Wobei... wo sind Haare ?? ;D ;D ;D