Dcount erzeuft Fehlermeldung 'Timeout'

Guten Tag,

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.

Syntax:
Ausgabefeld.Value = DCount(„Emp“, „vw_KampEmp_zu_liefern“, „Kamp=’“ & KAMPAGNE_ID & „’“)

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.

Wäre wirklich Dankbar für die Hilfe.

Mit freundlichen Grüßen

Hallo.

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 …

Gruß Eillicht zu Vensre

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.

Mit freundlichen Grüßen
Christian

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

rs.Open „SELECT Count (“ & Count_Name & „) as Anzahl FROM " & TablName & " WHERE " & Where_Name & " = '“ & Where_Kriterium & „’“, Conn, adOpenDynamic, adLockOptimistic ’ WHERE " & Where_bedingung & "
Anzahl = rs.Fields(„Anzahl“).Value
rs.Close
Select_Count = Anzahl

Exit_Select_Count:
Exit Function

Err_Select_Count:
MsgBox Err.Description
Resume Exit_Select_Count
End Function

MfG
Christian

Hallo Christian,

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!

Grüße aus Essen
Wolfgang
(Netwolf)