Performance bei DSum via VBA

13/09/2007 - 23:00 von Raimo Becker | Report spam
Hallo liebe NG!,

eine Verstàndnisfrage:
Ich benutze in einem Form txtboxen mit leider vielen DomSummen als
Steuerel.inhalt. Das dauert natürlich lange.
(Blöde DomànenAggregatfunktion- ich weiß)
Mein test-Umweg:Ich befeuere in einem Form diverse ungebundene Felder mit
txt123XY= A2XDaoDSum (bla,bla,bla)

wobei A2XDaoDSum die Funktion ist
das danach ist (leider) nicht von mir
Public Function A2XDaoDSum( _
psField As String, _
psDomain As String, _
Optional psCriteria _
As String = vbNullString) _
Dim dbs As DAO.Database
Dim rst As DAO.Recordset

Dim sSql As String
Dim vRet As Variant

' Rückgabewert initialisieren
vRet = Null

' SQL-String zusammen schnipseln
sSql = "SELECT Sum ([" & psField & "]) AS RecCount " & _
"FROM [" & psDomain & "] "

If Len(psCriteria) > 0 Then
sSql = sSql & "WHERE " & psCriteria
End If
sSql = sSql & ";"


Set dbs = CurrentDb

Set rst = dbs.OpenRecordset(sSql)

If rst.RecordCount > 0 Then
vRet = rst![RecCount]
End If
If Not IsNull(vRet) Then A2XDaoDSum = vRet
[...]
HandleExit:
On Error Resume Next
If Not rst Is Nothing Then rst.Close: Set rst = Nothing
If Not dbs Is Nothing Then dbs.Close: Set dbs = Nothing
Exit Function
End Function

von mir gekürzter Quellcode von
Quelle: http://www.kulpa-online.com/tipps-a...-4001.html
(Danke! Super Schnipsel!)

Bsp.:
A2XDaoDSum ("geplante Menge","qry_Bestellvorschlàge","ArtNr =' "& me.blala
&"'")

Die Frage:
Warum làuft der Code bei 96 Textfeldern minimum 10-20 x schneller wenn ich die
Abfrage "qry_Bestellvorschlàge" vorher geöffnet habe? Falls ich die nicht
offen habe dauert es ewig- pro Textfeld so 30-50 Sekunden.

Ich öffne doch im Code erst das Recortset mit der sSql Anweisung?
Und setze sie dann im Code mit der "dbs" = Nothing
Liegt es am fehlendem rst.close / dbs.close?

Ich bin ja froh das es so ist, aber wüsste gerne warum.

Danke Raimo
 

Lesen sie die antworten

#1 Henry Habermacher
14/09/2007 - 04:49 | Warnen spam
Hallo Raimo

Raimo Becker wrote:
Ich benutze in einem Form txtboxen mit leider vielen DomSummen als
Steuerel.inhalt. Das dauert natürlich lange.
(Blöde DomànenAggregatfunktion- ich weiß)
Mein test-Umweg:Ich befeuere in einem Form diverse ungebundene Felder mit
txt123XY= A2XDaoDSum (bla,bla,bla)

wobei A2XDaoDSum die Funktion ist
das danach ist (leider) nicht von mir
Public Function A2XDaoDSum( _
psField As String, _
psDomain As String, _
Optional psCriteria _
As String = vbNullString) _
Dim dbs As DAO.Database



so sicher nicht. Das kann unmöglich laufen. Du solltest, wenn Du hier Code
postest, schon den Code posten, der auch làuft. Schon die Deklaration der
Funktion ist falsch.

Die Frage:
Warum làuft der Code bei 96 Textfeldern minimum 10-20 x schneller wenn
ich die Abfrage "qry_Bestellvorschlàge" vorher geöffnet habe? Falls ich
die nicht offen habe dauert es ewig- pro Textfeld so 30-50 Sekunden.



Weil dann die Ergebnismenge der Abfrage, auf der Du basierst, bereits im
Hauptspeicher ist und nicht neu von der Platte eingelesen werden muss.

Ich öffne doch im Code erst das Recortset mit der sSql Anweisung?
Und setze sie dann im Code mit der "dbs" = Nothing
Liegt es am fehlendem rst.close / dbs.close?



Nein, daran wird es kaum liegen, nicht in diesem Ausmass.

Hast Du Dir schon mal überlegt, die Felder direkt in der Query hinter dem
Formular aufzusummieren, statt dies bei jedem Feld über eine Funktion zu
machen?

Gruss
Henry

Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen