Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: albrecht am April 22, 2020, 17:08:39

Titel: Berechnung im Access VB_Code
Beitrag von: albrecht am April 22, 2020, 17:08:39
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
Titel: Re: Berechnung im Access VB_Code
Beitrag von: Beaker s.a. am April 22, 2020, 17:46:54
"," statt ";" bei DateDiff
Titel: Re: Berechnung im Access VB_Code
Beitrag von: albrecht am April 22, 2020, 18:37:10
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.
Titel: Re: Berechnung im Access VB_Code
Beitrag von: MzKlMu am April 22, 2020, 18:52:04
Hallo,
wird eine Zeile markiert für den Fehler, wenn ja, welche ?
Titel: Re: Berechnung im Access VB_Code
Beitrag von: ebs17 am April 22, 2020, 19:31:02
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.
Titel: Re: Berechnung im Access VB_Code
Beitrag von: albrecht am April 22, 2020, 19:57:20
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.
Titel: Re: Berechnung im Access VB_Code
Beitrag von: DF6GL am April 22, 2020, 19:59:08
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.
Titel: Re: Berechnung im Access VB_Code
Beitrag von: albrecht am April 22, 2020, 20:07:28
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.
Titel: Re: Berechnung im Access VB_Code
Beitrag von: MzKlMu am April 22, 2020, 20:11:56
Hallo,
was soll denn die Abfrage zeigen ?
Titel: Re: Berechnung im Access VB_Code
Beitrag von: albrecht am April 22, 2020, 20:14:18
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.
Titel: Re: Berechnung im Access VB_Code
Beitrag von: MzKlMu am April 22, 2020, 20:22:11
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 MonateBenutzt
Kommagtrennt in die Feldlist. Aus der Wherklausel muss das komplett raus.
Titel: Re: Berechnung im Access VB_Code
Beitrag von: albrecht am April 22, 2020, 20:40:56
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?
Titel: Re: Berechnung im Access VB_Code
Beitrag von: DF6GL am April 22, 2020, 21:11:06
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
Titel: Re: Berechnung im Access VB_Code
Beitrag von: MzKlMu am April 22, 2020, 23:23:30
Hallo,
gelesen, gesehen und dann doch falsch kopiert. Da ärgere ich mich jetzt aber über mich selbst.
Titel: Re: Berechnung im Access VB_Code
Beitrag von: DF6GL am April 23, 2020, 10:17:58
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