Re: Timeout
- From: Peter Götz <gssg_nospam@xxxxxxxxxxx>
- Date: Mon, 27 Feb 2006 15:18:57 +0100
Hallo Lars,
Ich hoffe so ist besser.
Ein klein wenig.
dim rst as new ADODB.Recordset
Eine solche Deklaration solltest Du besser vermeiden, da Du Dir damit jede
Möglichkeit verbaust, festzustellen, ob bereits eine Instanz dieses
Recordsets erzeugt worden ist.
Schreibe besser
Dim Rst as ADODB.Recordset
....
Set Rst = New ADODB.Recordset
sql="meine Sql Abfrage"
Ich kenne kein DBS, welches ein solches SQL-Statement sinnvoll
interpretieren könnte.
rst.CursorLocation = adUseClient
rst.Open sql, cn, adOpenKeyset, adLockReadOnly <- hier kommt der timeout
Wie und wo hast Du Dein Connection-Objekt cn erstellt und geöffnet?
Es ist keine gute Praxis, die Open-Anweisung für ein Recordset mit allen
möglichen und hier unmöglichen Parametern vollzupacken. Besser lesbar und
weit weniger hinderlich beim Debugging ist es, wenn die die einzelnen
Eigenschaften Deines Recordsets schon vor dem .Open mit den richtigen Werten
belegst.
With rst
Set .Active Connection = Cnn
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Source = sql
.Open
End With
Sieht doch gleich viel übersichtlicher aus. Findest Du nicht?
Dein adOpenKeyset ist in Verbindung mit CursorLocation = adUseClient
unsinnig. Ein clientseitiges Recordset kann kein dynamisches sein. Das wäre
nur mit einem serverseitigen Cursor möglich. Den sollte man aber tunlichst
vermeiden, da er ein absoluter Ressourcenfresser ist und normalerweise
auch nicht wirklich notwendig ist. Verschiedene DBS kennen überhaupt keine
dynamischen Cursor.
Es scheit an der dauer der Abfrage zu liegen.
Nicht unbedingt.
Da Du offenbar keinerlei Fehlererkennung/Fehlerbehandlung in Deinem Code
hast, bin ich nicht sicher, ob es nicht schon beim Öffnen der Connection zum
Timeout kommt.
Für einen Timeout gibt es verschiedene Gründe.
Der eine wäre die Überschreitung der Zeit Connection.ConnectionTimeout beim
Öffnen der Connection, eine andere wäre das Überschreiten von
Connection.CommandTimeOut beim Öffnen eines Recordsets oder Ausführen eines
Commands.
Kann man den Timeout für SQL verbindungen hoch setzen?
s.oben:
Es gibt zwei verschiedene Timeouts.
Connection.ConnectionTimeOut
Connection.CommandTimeOut
Der Default-Wert für ConnectionTimeOut ist 15 Sekunden.
Der Default-Wert für CommandTimeOut ist 30 Sekunden.
Dauert das Öffnen der Connection länger als 15 Sekunden, dann musst Du
ConnectionTimeOut auf einen höheren Wert setzen.
Dauert das Einlesen der Daten für Dein Recordset länger als 30 Sekunden, was
bei 150 normalen Datensätzen kaum der Fall sein dürfte, dann musst Du
CommandTimeOut auf einen höheren Wert setzen.
In einem normalen LAN (selbst einem langsamen 10MBit-Lan) sollte das Öffnen
einer Connection aber nicht annähernd die vorgegebenen 15 Sekunden dauern.
Falls das Einlesen Deiner 150 Datensätze länger als 30 Sekunden dauert,
solltest Du in der Tat mal dein Select-SQLStatement überprüfen und
vielleicht mal hier zeigen.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
.
- References:
- Re: Timeout
- From: Peter Götz
- Re: Timeout
- Prev by Date: Re: Timeout
- Next by Date: Re: ADODC und Passwort
- Previous by thread: Re: Timeout
- Index(es):
Relevant Pages
|