Summen-Abfrage per VBA

Hallo,

Ich hab mal wieder ein Brett vorm Kopf!

In einer Tabelle habe ich eine Zeile, die mir einen Grössenwert angibt.

ich möchte nun diesen Wert für alle Datensätze einer bestimmten Kategorie aufaddieren und in einer Variable weiterverarbeiten. Mein code bisher sieht so aus:

Sub checkGroesse(Kat As String)
 Dim db As Database
 Dim rs As QueryDef
 Set db = CurrentDb
 Set rs = db.CreateQueryDef("", "SELECT Sum(DateiSize) AS DSum, KatID FROM tbl\_Datei GROUP BY KatID HAVING KatID=' & Kat'")

Ich hab in dem Objekt rs den Wert den ich brauche drinstehen (unter Fields-Items-Item1, kann aber nicht per code draufzugreifen…

Was fehlt mir da noch?

Danke für Eure Mühe

Hallo Michael,

Ich hab mal wieder ein Brett vorm Kopf!

*beilundsägehole*

ich möchte nun diesen Wert für alle Datensätze einer
bestimmten Kategorie aufaddieren und in einer Variable
weiterverarbeiten. Mein code bisher sieht so aus:
Was fehlt mir da noch?

der Code ist überflüssig, den es gibt die Funktion: DSUM

meineVariabel = DSUM(„Feld“,„Tabelle“,„Bedingung“)

Mehr ist nicht nötig :smile:

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hi Wolfgang

Du bist meine Rettung! :smiley:
Das nächste Käffchen geht auf mich…
Und wenn ich wüsste wie man *chen vergibt, gäbs das auch :smiley:
Vielen Dank, hat super geklappt!!!

Wobei es schon gute Gründe gibt, nicht DSum, sondern eine eigene Funktion zu nehmen (DSum ist nämlich grottenlangsam). Als Einzeiler:

Public Function checkGroesse(Kat As String)As Long
checkGroesse = Currentdb.OpenRecordset("SELECT Sum(DateiSize) AS DSum FROM tbl\_Datei WHERE KatID='" & Kat & "'",dbOpensnapshot)(0)
End Function

Etwas ausführlicher:

Public Function checkGroesse(Kat As String)As Long
Dim RS as DAO.Recordset, DB as DAO.Database
 Set DB = CUrrentdb()
 Set RS = DB.OpenRecordset("SELECT Sum(DateiSize) AS DSum FROM tbl\_Datei WHERE KatID='" & Kat & "'",dbOpensnapshot)
 If Not RS.EOF then CheckGroesse = RS(0)
End Function

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)