vielleicht könnt ihr mir ja helfen bei meinem Problem. Ich habe eine Abfrage in der Empfänger(Empf) mit der dazugehörige Kampagne Kamp) drinstehen. Jetzt laufe ich mit einem Dcount darüber und zähle alle Empfänger in der Tabelle mit einer bestimmten Kampagnen ID.
Z.B
Empfänger ID:
{5079D008-1D39-4C08-9742-544B202ACE41}
{541321A3-3A37-4216-B4FF-4DBBF1DD751C}
usw.
mit dazugehöriger Kampagnen ID:
{09338BA5-38B2-40B0-BB50-A317C9556164}
In der Abfrage sind ca. 9800 Datensätze. Jetzt kommt das Kuriose, die Dcount-Funktion funktioniert auch für fast alle Kampagnen, aber bei einer Kampagne kommt die Fehlermeldung Timeout.
Kann mit jemand vielleicht helfen warum die Funktion dort spinnt? Der Wert KAMPAGNE_ID ist auch immer besetzt. Der Fehler tritt leider bei einem Kunden auf und nicht bei mir, bzw. ist mal aufgetreten aber ich dachte mir dabei nichts. Habe die Kampagen neu eingelesen und dann ging das wieder, aber kann ich meinem Kunden glaube ich so nicht mitteilen.
Kann mit jemand vielleicht helfen warum die Funktion dort spinnt?
So aus der Ferne gegocken, denke ich, dass die Funktion nicht spinnt. Es ist einfach so, dass Domänenfunktionen gnadenlos langsam sind. Vermutlich ist die gesuchte ID so oft vertreten, dass tatsächlich timeout erreicht wird, bevor der Domänendurchlauf beendet ist.
Abhilfe:
Den Timeout-Wert hochdrehen (ganz schlecht!)
Besser die Zählung anders verwirklichen - das tunt Deine Anwendung auch generell.
Beispiel :
Public Function pfn\_lng\_CountRec(ByVal TablName As String, \_
ByVal KampagID As String) \_
As Long
Dim lpm\_lng\_RecrdCnt As Long
Dim lpm\_rst\_CountSet As DAO.Recordset
Set lpm\_rst\_CountSet=CurrentDB.OpenRecordset("SELECT Kampagne FROM "+ \_
TablName+ \_
" WHERE Kampagne="+ \_
KampagID)
With lpm\_rst\_CountSet
If (Not .EOF) Then
.MoveFirst
lpm\_lng\_RecrdCnt=.RecordCount
Else
lpm\_lng\_RecrdCnt=0
End If
.Close
End With
Set lpm\_rst\_CountSet=Nothing
pfn\_lng\_CountRec=lpm\_lng\_RecrdCnt
End Function
Das sollte um einiges schneller sein als Deine Variante (und fehlerresistenter, falls mal eine fehlerhafte Kampagne reingerät). Vorsicht ungetestet - kann noch Vertippsler enthalten …
Danke für die schnelle Hilfe. Werde ich auf jedenfall gleich mal ausprobieren, den Gedanken hatte ich auch schon.
Es gibt aber Dateien die noch größer sind und dort funktioniert die Dcount-Funktion…*kopfschüttel. Na ja, hilft alles nichts. Noch mal danke für die Lösung.
Habe jetzt die neue Funktion erstellt und müsste soweit auch ausreichend sein.
Public Function Select_Count(ByVal Count_Name As String, ByVal TablName As String, ByVal Where_Name As String, ByVal Where_Kriterium As String) As Long
On Error GoTo Err_Select_Count
Dim Conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Anzahl As Long
Set Conn = CurrentProject.Connection
Set rs = New ADODB.Recordset
Kann mit jemand vielleicht helfen warum die Funktion dort
spinnt?
ja, die Lösung ist ganz einfach: DEFRAG
Abgesehen davon, dass Datenbanken i.d.R. alleine auf einer Partition liegen sollten, ist es zwingend notwendig, dass regelmäßig die Festplatte defragmentiert wird!! Ein Scandisk vorher sollte auch noch erfolgen!