Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Berechnung im Access VB_Code

Begonnen von albrecht, April 22, 2020, 17:08:39

⏪ vorheriges - nächstes ⏩

albrecht

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

Beaker s.a.

Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

albrecht

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.

MzKlMu

Hallo,
wird eine Zeile markiert für den Fehler, wenn ja, welche ?
Gruß Klaus

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

albrecht

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.

DF6GL

#6
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.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

albrecht

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.

MzKlMu

Hallo,
was soll denn die Abfrage zeigen ?
Gruß Klaus

albrecht

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.

MzKlMu

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.
Gruß Klaus

albrecht

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?

DF6GL

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
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

Hallo,
gelesen, gesehen und dann doch falsch kopiert. Da ärgere ich mich jetzt aber über mich selbst.
Gruß Klaus

DF6GL

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

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access