Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: martenk am Juli 09, 2021, 07:41:39

Titel: Berechnung Verbrauch
Beitrag von: martenk am Juli 09, 2021, 07:41:39
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
Titel: Re: Berechnung Verbrauch
Beitrag von: DF6GL am Juli 09, 2021, 12:39:56
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)


Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 09, 2021, 12:58:51
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
Titel: Re: Berechnung Verbrauch
Beitrag von: DF6GL am Juli 09, 2021, 13:11:23
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.
Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 09, 2021, 13:44:26
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
Titel: Re: Berechnung Verbrauch
Beitrag von: DF6GL am Juli 09, 2021, 19:24:59
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.
Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 09, 2021, 20:51:54
Verstehe nicht wie ich das machen soll
Titel: Re: Berechnung Verbrauch
Beitrag von: DF6GL am Juli 11, 2021, 09:48:13
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.
Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 12, 2021, 08:19:36
ich weiss nicht, wie ich denn dann an die Tagespreise der jeweiligen Verbrauchsform komme
Titel: Re: Berechnung Verbrauch
Beitrag von: DF6GL am Juli 12, 2021, 09:54:09
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.


 
Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 12, 2021, 11:27:04
lieben dank für die Hilfe - leider reicht es bei mir da nicht mehr für aus  :-[

Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 12, 2021, 15:48:54
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
Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 12, 2021, 17:52:15
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
   
Titel: Re: Berechnung Verbrauch
Beitrag von: Beaker s.a. am Juli 12, 2021, 18:34:58
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
Loop
Die Sprungmarke kannst du löschen, macht so eh keinen Sinn.

gruss ekkehard
Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 13, 2021, 10:44:51
hat alles prima geklappt - inkl. zusätzlichem Wissen :-) - lieben Dank euch beiden
Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 13, 2021, 12:23:54
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
Titel: Re: Berechnung Verbrauch
Beitrag von: DF6GL am Juli 13, 2021, 12:57:22
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#
Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 13, 2021, 14:22:35
datbis kommt so an datbis = "19.09.2021"

datebis = Format(datbis, "\#mm\/dd\/yyyy\#")

klappt leider nicht
Titel: Re: Berechnung Verbrauch
Beitrag von: DF6GL am Juli 13, 2021, 14:30:40
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...
Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 13, 2021, 14:46:16
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
Titel: Re: Berechnung Verbrauch
Beitrag von: DF6GL am Juli 13, 2021, 15:38:01
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.
Titel: Re: Berechnung Verbrauch
Beitrag von: martenk am Juli 13, 2021, 16:44:11
klasse - lieben dank
Titel: Re: Berechnung Verbrauch
Beitrag von: markusxy am Juli 23, 2021, 08:12:42
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.
Titel: Re: Berechnung Verbrauch
Beitrag von: Josef P. am Juli 23, 2021, 09:51:33
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
Titel: Re: Berechnung Verbrauch
Beitrag von: DF6GL am Juli 23, 2021, 10:50:29
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    :'(   )   >:(