Hallo,
folgendes Problem
ich trage Reservierungsdaten in eine Tabelle
Anreise
Abreise
....
In dieser Tabelle habe ich auch Verbrauchsdaten wie Gas, Wasser, Strom
Ich habe eine Tabelle Verbrauch die so aussieht (Wert pro Tag)
id_Gas__Wasser___Strom_von________bis
1__1,5__1________1,5___01.01.2021_31.10.2021
1__3,5__1________1,5___01.11.2021_31.03.2022
ich trage die Daten in die Reservierungstabelle so ein -
Set db = CurrentDb
Set rsb = db.OpenRecordset("Reservierungen", dbOpenDynaset)
rsb.FindFirst "'Reservierungs-Nr' = '" & Buchungsnummer & "'"
If rsb.NoMatch Then
GoTo anlegen1
Else
MsgBox ("Buchumgsnummer: " & Buchungsnummer & " schon vorhanden. Abbruch!")
Exit Sub
End If
anlegen1:
rsb.AddNew
rsb!ReservierungsnummerHP = Buchungsnummer
rsb![Kunden-Nr] = lngKundenId
rsb!Anreisetag = datvon
rsb!Abreisetag = datbis
rsb!Erwachsene = AnzPersonen
rsb!Haustiere = Haustier
rsb!Miete = Preis
rsb!Hochstühle = Kinderhochstuhl
rsb!Kindreisebett = Kinderreisebett
rsb!Bettwäsche = Bettwaesche
rsb!Waeschepaket = Frottee
rsb!FrüheAnreise = frueh
rsb!SpäteAbreise = spaet
rsb![Anzahlung 1] = Anzahlung
rsb![Anzahlung 2] = Restzahlung
rsb![Veranstalter] = "F.E."
Haus = Mid(Haus, 14, 4)
Haus = Replace(Haus, " ", "")
rsb![Objekt-Nr] = Haus
rsb.Update
könnt ihr mir dabei helfen, wie ich die berechneten Verbrauchswert mit in die Tabelle Reservierungen bekomme (Tabellenfelder: Gas, Wasser,Strom
Hallo,
wofür gibt es eine eigene Tabelle "Verbrauch" mit einem "Von"- und "Bis"-Datum?
Ich unterstelle, dass der Verbrauch sich nach dem Reservierungs-Zeitraum richtet.
Insofern können 3 Verbrauchsfelder ("GasVerbrauch", "WasserVerbrauch", "StromVerbrauch") gleich in der Tabelle "Reservierungen" mitgeführt werden.
Weiterhin:
rsb.FindFirst "'Reservierungs-Nr' = '" & Buchungsnummer & "'"
muss so lauten:
rsb.FindFirst "[Reservierungs-Nr] = '" & Buchungsnummer & "'"
Und (ohne die dahinterliegenden Datentypen zu kennen):
rsb!Miete = Str(Preis)
Hallo Franz,
genau wie du geschrieben hast es ist pro Reservierungszeitraum
aber wie soll ich es denn gleich mitgeben - du meinst im coding - ich habe aber im nächsten Jahr eine Saisons und andere Preise
deshalb die Tabelle
oder wie würdest du es machen
Hallo,
ich sehe keine Preise in der Verbrauchstabelle... Woher kommen diese Preise?
Normalerweise werden Saisonen und (aktuelle gültige) Preise in einer Saison-Tabelle ("SaisonID", "Von", Bis") und Preise in einer Preistabelle geführt ( "SaisonId_f","Verbrauchsart","Preis", "Einheit")
Ich denke, Du löst Dich mal von den ungebundenen Formularen und baust die Tabellen entspr. den Normalisierungsregeln neu auf. Sprich, Du fängst nochmal von vorne an (Tabellenkonstruktion, Beziehungen, dann (Standard-) Formulare mit nur den aller nötigsten Code darin) und nutzt die Access-Möglichkeiten, anstatt Access mit beim Code neu zu erfinden.
Hi
id_Gas__Wasser___Strom_von________bis
1__1,5__1________1,5___01.01.2021_31.10.2021
1__3,5__1________1,5___01.11.2021_31.03.2022
doch im Zeitraum v 01.01. - 31.10. kostet Gas 1,5 Euro wasser 1 Euro und Strom 1,5 Euro pro tag
im Zeitraum v 01.11. - 31.03.2022. kostet Gas 3,5 Euro wasser 1 Euro und Strom 1,5 Euro pro tag
Hallo,
wenn die Zeiträume der Kosten sich mit dem Reservierungszeitraum überschneiden, müssen die Gültigkeitsbereiche in der Tabelle mitgeführt werden und durch passende Abfragen mit den Reservierungs-Datumsangaben zusammengerechnet werden.
Verstehe nicht wie ich das machen soll
Hallo,
wenn die Kosten tagesgenau aufgedröselt und insgesamt über den Buchungszeitraum addiert werden müssen, dann wäre eine SQL -Lösung entsprechend dieser Links einsetzbar:
https://www.ms-office-forum.net/forum/showthread.php?t=298414
https://www.ms-office-forum.net/forum/showthread.php?t=298670
und weitere aus dieser Reihe.
Alternativ ist eine VBA-Prozedur möglich, die eben die zugeordeneten Preise über den Buchungszeitraum
ermittelt und berechnet.
ich weiss nicht, wie ich denn dann an die Tagespreise der jeweiligen Verbrauchsform komme
Hallo,
Kalendertabelle ("tblTagespreise") anlegen mit den Tagespreisen der Verbrauchsformen.
Pro Datum ein Datensatz mit den dazu gültigen Preisen der Verbrauchformen.
Abfrage über den Reservierung-Zeitraum mit Aufsummierung der einzelnen Preise mal Menge ergibt die Kosten für die Buchung.
lieben dank für die Hilfe - leider reicht es bei mir da nicht mehr für aus :-[
okay - habe nun eine tabelle angelegt mit den einzelpreisen für den tag - kannst du mir vielleicht noch zeigen dann mit der zuweisung der einzelnen Beträge pro Tag
auch wenn´s zusammengewchustert ist - so geht´s
Public Sub GetOrders()
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL, strSQL1 As String
Dim Gas, Wasser, Strom, dat, Tage, Stromneu, Wasserneu, Gasneu, reminddate
Dim datebis, datevon As Date
datevon = "02.10.2021"
datebis = "12.10.2021"
Tage = DateDiff("d", datevon, datebis)
Do Until datevon = datebis
reminddate = Format(datebis, "dd/mm/yyyy")
Set dbs = CurrentDb
' strSQL1 = "SELECT * FROM tbl_Verbrauch WHERE Datum =#10-20-2021#;"
strSQL = "SELECT * FROM tbl_Verbrauch WHERE Datum =" & Format(reminddate, "\#mm\/dd\/yyyy\#")
Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
Do Until rs.BOF
Gas = rs!Gas
Wasser = rs!Wasser
Strom = rs!Strom
datevon = datevon + 1
Gasneu = Gas + Gasneu
Wasserneu = Wasser + Wasserneu
Stromneu = Stromneu + Strom
GoTo sprung
Loop
sprung:
Loop
MsgBox (Wasserneu)
MsgBox (Gasneu)
MsgBox (Stromneu)
End Sub
Hallo Marten,
Kurze Hinweise OT
Dim Gas, Wasser, Strom, dat, Tage, Stromneu, Wasserneu, Gasneu, reminddateDas sind alles Variablen vom Typ Variant. Es ist besser alle Variablen mit
ihrem eigenen Typ zu deklarieren.
Dim datebis, datevon As DateAuch datebis ist vom Typ Variant.
Set dbs = CurrentDbDiese Zeile gehört unbedingt vor die Schleife.
Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)Wozu oben eine Referenz erzeugen und diese dann hier nicht benutzen
Set rs = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
Do Until rs.BOFDa landet der Datensatzzeiger nur bei einem leeren RS.
Wenn du wirklich das RS von hinten nach vorne durchlaufen willst, musst
du vorher zum letzten DS gehen
rs.MoveLastUnd dein Loop funzt so auch nicht
'von hinten nach vorne
.
.
rs.MovePrevious
Loop
'nur so landet der Zeiger irgendwann bei rs.BOF
'von vorne nach hinten
Do Until rs.EOF
.
.
rs.MoveNext
LoopDie Sprungmarke kannst du löschen, macht so eh keinen Sinn.
gruss ekkehard
hat alles prima geklappt - inkl. zusätzlichem Wissen :-) - lieben Dank euch beiden
hab leider noch ein weiteres Problem
brauche in dieser Prozedur noch eine weitere Variable aus einer anderen Tabelle
dazu nehme ich diesen code
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL, strSQL1 As String
Dim Gas, Wasser, Strom, dat, Tage, Stromneu, Wasserneu, Gasneu, reminddate, Haus, Endreinigung
Dim datebis As Date, datevon As Date
datevon = "24.10.2021"
datebis = "07.11.2021"
Haus = "A1"
Set dbs = CurrentDbstrSQL1 = "SELECT * FROM Objekte WHERE [Objekt-Nr] = A10"
Set rsn = CurrentDb.OpenRecordset(strSQL1, dbOpenSnapshot)
Bekomme dann Laufzeitfehler 1 Parameter wurden erwartet, aber es wurden zu wenig übergeben
Hallo,
deklariere die Variablen wie angesprochen richtig und vernünftig!
Hier ist das zusätzliche Wissen nicht angewandt:
ZitatDim Gas, Wasser, Strom, dat, Tage, Stromneu, Wasserneu, Gasneu, reminddate, Haus, Endreinigung
Fehlerquelle:
ZitatSet dbs = CurrentDb
Dim strSQL1 As String
strSQL1 = "SELECT * FROM Objekte WHERE [Objekt-Nr] = 'A10'"
Das ist falsch:
datevon = "24.10.2021"
datebis = "07.11.2021"
und muss so lauten:
datevon = #10/24/2021#
datebis = #11/07/2021#
datbis kommt so an datbis = "19.09.2021"
datebis = Format(datbis, "\#mm\/dd\/yyyy\#")
klappt leider nicht
Hallo,
Zitatdatbis kommt so an datbis = "19.09.2021"
was meinst Du damit?
Zitatdatebis = Format(datbis, "\#mm\/dd\/yyyy\#")
Was ist "datbis"???
Wenn es sich um Formular-Steuerelemente handelt, dann setze immer "Me!" vor dessen Namen.
Ansonsten wäre die Zuweisung korrekt.
Und poste immer den kompletten Code einer oder aller betroffenen Prozeduren...
Hallo
hab nochj eine Frage
wollte diese Funktion verwenden
Tage = DateDiff("d", datevon, datebis)
datevon und datebis kommen in diesem Format #06/05/2021#
ich brauche es aber so
05.06.2021
Hallo,
Zitatich brauche es aber so
05.06.2021
was redest Du denn da? "05.06.2021" ist ein Datum und kein Tag...
Du willst die
Tage im definierten Zeitraum berechnen.
Dann stimmt die Codezeile, wenn
"Tage" vom Datentyp Long ist.
dateVon und datebis vom Datentyp Datum/Uhrzeit sind.
Also so (was Du bis jetzt immer ignorierst):
Dim lngTage as Long '
vernünftig benamsen und korrekten Datentyp definieren!!!!!!!! wenn es sich um Variablen handelt Dim datDateVon As Date
Dim datDateBis As Date
lngTage = DateDiff("d", datDateVon, datDateBis)[Edit]
oder wenn es sich nur um Steuerelemente handelt (Referenz auf das aktuelle Objekt (Formular) voranstellen) und evtl. leere Felder berücksichtigen:
Me!Tage = DateDiff("d", nz(Me!datevon,Date) , nz(Me!datebis,Date) )
[/Edit]
Du solltest Dich dringend mit den Grundlagen der VBA-Programmierung auseinandersetzen und vor allen Dingen die Vorschläge, die Du bekommst, auch (überall) umsetzen.
klasse - lieben dank
Zitat von: DF6GL am Juli 13, 2021, 12:57:22Das ist falsch:
datevon = "24.10.2021"
datebis = "07.11.2021"
und muss so lauten:
datevon = #10/24/2021#
datebis = #11/07/2021#
Theoretisch funktionieren beide Varianten.
Das Problem mit dem String: Das funktioniert nur, wenn die Windows Spracheinstellungen übereinstimmen.
Sobald die abweichen interpretiert VBA den String anders und der Code führt zu anderen Ergebnissen.
Ganz abgesehen davon, dass die String Verarbeitung langsamer ist.
Hallo!
Zitat von: DF6GL am Juli 13, 2021, 15:38:01Me!Tage = DateDiff("d", Format(Me!datevon,"\#mm\dd\yyyy\#") , Format(Me!datebis,"\#mm\dd\yyyy\#") )
Welche Aufgabe hat Format in dieser Code-Zeile?
Anm.: CDate("#7/23/2021#") wird einen Laufzeitfehler auslösen. ;-)
LG
Josef
Hallo Josef,
jahhh, wenn Du so fragst: gar keine vernünftige :o
Ich habe da wohl eher an ein SQL-Statement denn an VBA-Code gedacht (oder vielleicht auch gar nicht gedacht :'( ) >:(