Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Laufende Berechnung in Abfrage
zurück: summe in einer abfrage weiter: Daten mit "null" Werten importieren Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Bitte Status wählen ! Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Assunta
Gast


Verfasst am:
29. Nov 2005, 09:36
Rufname:

Laufende Berechnung in Abfrage - Laufende Berechnung in Abfrage

Nach oben
       

Hallo an alle! Laughing

Ich möchte gerne eine Abfrage erstellen, in der eine laufende Berechnung durchgeführt wird.

In meiner Tabelle habe ich die Spalten: Datum, MJ+ und MJ-. Nun möchte ich den Endstand pro Jahr berechnen. d.h. z.b.
Endstand 2005= Endstand 2004 - ((Summe von MJ+) - (Summe von MJ-))
Der erste Endstand von 2003 ist ein festgelegter Wert (hier: 190,09)

Hab auch schon versucht eine Abfrage zu basteln:
Code:
SELECT   Year([Datum]) AS Jahr, Sum([MJ+]) AS [SummevonMJ+],
         Sum([MJ-]) AS [SummevonMJ-], Sum([MJ+])-Sum([MJ-]) AS Saldo,
         190.09+[Saldo] AS Endstand
FROM     tbl_XY
GROUP BY Year([Datum]);
Nur leider wird hier der Endstand immer von 190,09 berechnet, statt vom Endstand des vorherigen Jahres.

Ich hoffe ihr könnt mir helfen.

Gruß
Assunta[/quote]
KirstenS
VBA- und SQL-Programmierer


Verfasst am:
29. Nov 2005, 10:30
Rufname:


AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Assunta,

da du den Saldo ja erst in der Abfrage berechnest, kannst du darauf noch nicht zurückgreifen. Versuchs mal mit
Code:
SELECT   Year([Datum]) AS Jahr, Sum([MJ+]) AS [SummevonMJ+],
         Sum([MJ-]) AS [SummevonMJ-], Sum([MJ+])-Sum([MJ-]) AS Saldo,
         190.09+Sum([MJ+])-Sum([MJ-]) AS Endstand
FROM     tbl_XY
GROUP BY Year([Datum]);

Gruß Kirsten
Assunta
Gast


Verfasst am:
29. Nov 2005, 11:05
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Kirsten,

danke für deine Antwort. Leider bekomme ich beim Endstand immer noch nicht die richtigen Ergebnisse raus. Es soll ja ne laufende Berechnung sein.

Es soll ja so sein:

Endstand 2004= 190,09 - ((Summe MJ+ von 2004)-(Summe MJ- von 2004)
--> nur einmalig
Sonst:
Endstand 2005= Endstand 2004 - ((Summe MJ+ von 2005)-(Summe MJ- von 2005)
Endstand 2006= Endstand 2005 - ((Summe MJ+ von 2006)-(Summe MJ- von 2006)

usw.

Hilfe!

Gruß
Assunta
KirstenS
VBA- und SQL-Programmierer


Verfasst am:
29. Nov 2005, 11:31
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Assunta,

hab dein Problem jetzt verstanden: du willst das Ganze rekursiv berechnen.

Für eine Rekursion ist eine Abfrage sicherlich nicht der richtige Weg, da z.B. der Saldo 2004 erst zu dem Zeitpunkt berechnet wird, wo du ihn für den Saldo 2005 bereits brauchst.

An deiner Stelle würde ich das Ganze mittels einer rekursiven Funktion lösen, die du in ein VBA-Modul schreibst. Sinngemäß und ungeprüft etwa so:
Code:
Public Function Endstand(Jahr As Integer) As Double
    Dim rs As New ADODB.Recordset
   
    If Jahr = 2003 Then
        Endstand = 190.09
      Else
        rs.Open "SELECT Sum([MJ+]) - Sum([MJ-]) AS Saldo " & _
                  "FROM tbl_XY " & _
                 "WHERE Year([Datum]) = " & Jahr, CurrentProject.Connection, _
                 adOpenStatic, adLockReadOnly
        Endstand = rs!Saldo + Endstand(Jahr - 1)
        Set rs = Nothing
    End If
End Function
Diese Funktion kannst du dann in deiner Abfrage verwenden, z.B.:
Code:
SELECT DISTINCT Year([Datum]) AS Jahr, Endstand(year([Datum])) As Endstand
FROM   tbl_XY
Gruß Kirsten
Assunta
Gast


Verfasst am:
29. Nov 2005, 12:16
Rufname:


AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Kirsten,

ich wollte die Berechnung in ne Abfrage packen, weil ich das Ergebnis in einem Textfeld in nem Formular angezeigt haben will und zwar abhängig davon, welches jahr man in nem Kombinationsfeld auswählt.
Aber wenns nicht anders geht, dann muss das wohl in VBA gemacht werden.

Hab jetzt deinen Code so übernommen. Erhalte jedoch die Fehlermeldung "Unzulässige Verwendung von Null" in der Zeile:
Code:
        Endstand = rs!Saldo + Endstand(Jahr - 1)
Wenn ich das in Einzelschritten durchlaufen lasse, erscheint bei rs!Saldo manchmal: rs!Saldo<Objektvariable oder With-Blockvariable nicht festgelegt>

Gruß
Assunta
KirstenS
VBA- und SQL-Programmierer


Verfasst am:
29. Nov 2005, 12:25
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Assunta,

wenn "unzulässige Verwendung von Null" kommt, kann es vielleicht sein, dass es für das fragliche Jahr keine Datensätze gibt? Oder dass in deiner Tabelle Daten enthalten sind, deren Jahr kleiner als 2003 ist?

Ersteres kannst du lösen mit
Code:
    If IsNull(rs!saldo) Then
        Endstand = Endstand(Jahr - 1)
      Else
        Endstand = rs!saldo + Endstand(Jahr - 1)
    End If
letzteres mit
Code:
    If Jahr < 2003 Then
        Endstand = 0
      ElseIf Jahr = 2003 Then
        '...

Gruß Kirsten
Assunta
Gast


Verfasst am:
29. Nov 2005, 13:00
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Kirsten,

2003 ist das kleinste Jahr und in jedem Jahr gibt es bei MJ+ bzw. MJ- Werte.

Hab das mit IsNull übernommen. Mein jetztiger Code:
Code:
Public Function Endstand(Jahr As Integer) As Double
    Dim rs As New ADODB.Recordset
   
    If Jahr = 2003 Then
        Endstand = 190.09
      Else
        rs.Open "SELECT Sum([MJ+]) - Sum([MJ-]) AS Saldo " & _
                  "FROM tbl_XY " & _
                 "WHERE Year([Datum]) = " & Jahr, CurrentProject.Connection, _
                 adOpenStatic, adLockReadOnly
        If IsNull(rs!saldo) Then
            Endstand = Endstand(Jahr - 1)
          Else
            Endstand = rs!saldo + Endstand(Jahr - 1)
        End If
        Set rs = Nothing
    End If
End Function
Beim Ausführen der Abfrage bekomme ich nun die Fehlermeldung:
Zitat:
Datentypen in Kriterienausdruck unverträglich.
Confused

Gruß
Assunta
KirstenS
VBA- und SQL-Programmierer


Verfasst am:
29. Nov 2005, 13:06
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Assunta,

an welcher Stelle kommt die Fehlermeldung?
Was für Datentypen sind MJ+ und MJ-?

Vielleicht wird das Problem deutlicher, wenn du dir Zwischenergebnisse ausgeben lässt (ins Testfenster oder über msgbox), z.B. von Jahr (um zu testen, ob der rekursive Aufruf funktioniert), oder von rs!saldo.

Gruß Kirsten
Assunta
Gast


Verfasst am:
29. Nov 2005, 14:56
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Kirsten,

die Fehlermeldung taucht an keiner bestimmten Stelle auf. Also es wird nix markiert.
MJ+ und MJ- sind beide Zahlen (Double).

Wenn ich jetzt nach dem
Code:
        Set rs = Nothing
        MsgBox Jahr
        MsgBox rs!saldo
setze, dann erscheint bei msgbox rs!sald die meldung:
Zitat:
item cannot be found in the collection corresponding to the requested name or ordinal

Gruß
Jolina
KirstenS
VBA- und SQL-Programmierer


Verfasst am:
29. Nov 2005, 14:58
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Assunta,

die msgbox müsstest du vor dem Set rs = Nothing machen.

Sonst hast du die Variable ja schon wieder freigegeben und kannst den Wert nicht mehr auslesen.

Gruß Kirsten
Assunta
Gast


Verfasst am:
29. Nov 2005, 15:54
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Kirsten,

es kommt schon wieder die Meldung:
Zitat:
Unzulässige Verwendung von Null
Sad aber erst nach n paar Datensätzen.
Code:
Public Function Endstand(Jahr As Integer) As Double
    Dim rs As New ADODB.Recordset
   
    If Jahr = 2003 Then
        Endstand = 190.09
      Else
        rs.Open "SELECT Sum([MJ+]) - Sum([MJ-]) AS Saldo " & _
                  "FROM qry_Dynevo " & _
                 "WHERE Year([Datum]) = " & Jahr, CurrentProject.Connection, _
                adOpenStatic, adLockReadOnly
        If IsNull(rs!saldo) Then
            Endstand = Endstand(Jahr - 1)
          Else
            Endstand = rs!saldo + Endstand(Jahr - 1)
        End If
        MsgBox rs!saldo
        Set rs = Nothing
        MsgBox Jahr
    End If
End Function

Gruß
Assunta
KirstenS
VBA- und SQL-Programmierer


Verfasst am:
29. Nov 2005, 16:01
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Assunta,

welche Datensätze schafft er denn, bzw. bis zu welchem Jahr kommt er?

Gruß Kirsten
Assunta
Gast


Verfasst am:
29. Nov 2005, 16:35
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Kirsten,

er durchläuft ja jeden einzelnen Datensatz und gibt aber anfangs den richtigen Saldo für das entsprechende Jahr wieder. Und plötzlich, ich glaub bei Jahr 2007, ist der Saldo null. Dann kommt die Meldung

Gruß
Assunta
KirstenS
VBA- und SQL-Programmierer


Verfasst am:
29. Nov 2005, 16:47
Rufname:

AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Assunta,

dann probier mal statt
Code:
        Endstand = rs!saldo + Endstand(Jahr - 1)
        Endstand = Nz(rs!saldo) + Endstand(Jahr - 1)
Nz gibt eine 0 zurück, falls rs!saldo null ist.

Gruß Kirsten
Assunta
Gast


Verfasst am:
29. Nov 2005, 17:03
Rufname:


AW: Laufende Berechnung in Abfrage - AW: Laufende Berechnung in Abfrage

Nach oben
       

Hallo Kirsten,

super. Es klappt! Smile

Habe vor Sum([MJ+]) und Sum([MJ-]) auch noch ein Nz gesetzt.

Vielen vielen Dank!!!

Gruß
Assunta
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Access Abfrage Uhrzeit (von bis) 1 new 2078 02. März 2004, 11:12
new Access Abfrage Uhrzeit (von bis)
Keine neuen Beiträge Access Tabellen & Abfragen: [DANKE-ERLEDIGT] Join in einer Abfrage 2 Gast 803 01. März 2004, 08:36
ppc [DANKE-ERLEDIGT] Join in einer Abfrage
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. Access Tabellen & Abfragen: Parameter Abfrage 3 shorty 2270 29. Feb 2004, 15:07
Willi Wipp Parameter Abfrage
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage nach Berufssparten 3 Fabian_bkk 1537 20. Feb 2004, 10:25
Willi Wipp Abfrage nach Berufssparten
Keine neuen Beiträge Access Tabellen & Abfragen: Wie kann ich mehr als 255Felder in eine Abfrage legen? 1 D.R. 2235 12. Feb 2004, 09:05
faßnacht(IT); Wie kann ich mehr als 255Felder in eine Abfrage legen?
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage verlinken 4 dfo 1326 10. Feb 2004, 22:17
Willi Wipp Abfrage verlinken
Keine neuen Beiträge Access Tabellen & Abfragen: Suche Hilfe zu SQL (DAO 351 MS) - Abfrage 3 Berny_H 1005 04. Feb 2004, 11:41
borstel Suche Hilfe zu SQL (DAO 351 MS) - Abfrage
Keine neuen Beiträge Access Tabellen & Abfragen: Diese Abfrage geht nicht. Kann ir jemand helfen 4 Oliver 1438 02. Feb 2004, 13:21
Willi Wipp Diese Abfrage geht nicht. Kann  ir jemand helfen
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage, die sich auf 2 Abfragen + 1 Tabelle bezieht 1 caro456 1832 27. Jan 2004, 20:03
Willi Wipp Abfrage, die sich auf 2 Abfragen + 1 Tabelle bezieht
Keine neuen Beiträge Access Tabellen & Abfragen: Unterscheid zwischen 2 Daten berechnen in Abfrage 2 itarus 1441 26. Jan 2004, 17:01
i_tarus Unterscheid zwischen 2 Daten berechnen in Abfrage
Keine neuen Beiträge Access Tabellen & Abfragen: Access abfrage nach 2 parametern 1 Weedy 3466 13. Jan 2004, 00:21
reke Access abfrage nach 2 parametern
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage in Kombifeld 3 Gast 1255 06. Jan 2004, 19:21
Krokette Abfrage in Kombifeld
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Macromedia Dreamweaver