Hallo zusammen
Ich habe eine Applikation, welche über einen ISDN-Router eine Verbindung zu einem SQL-Server aufbaut:
conn.CursorLocation = adUseServer
conn.ConnectionString = CONN\_STRING
conn.Open
Set rsEvents = New Recordset
Set rsEvents.ActiveConnection = conn
rsEvents.CursorType = adOpenKeyset
rsEvents.Open "SELECT \* FROM Events"
Neben rsEvents hängen auch noch diverse andere Recordset an dieser Connection.
Grundsätzlich läuft das alles super. Das Problem ist nur, wenn der ISDN-Router bei einer Inaktivität die Verbindung kappt und dieser Zustand zu lange anhält, geht die Connection verloren und das System melden einen Fehler 6160.
Die Frage ist nun, wie kann ich die Connection zwingen immer offen zu bleiben, auch bei heruntergefahrener ISDN-Connection?
Danke und Gruss
Martin
Ich bins nochmals
Habe die Antwort, glaub ich, gerade selber gefunden:
conn.ConnectionTimeout wird einfach auf 0 gesetzt.
Gibt es noch eine elegantere Lösung?
Gruss
Martin
Hallo zusammen
Habe die Antwort, glaub ich, gerade selber gefunden:
conn.ConnectionTimeout wird einfach auf 0 gesetzt.
Habe mich leider geirrt, da jetzt die Zeit bis das Connection-Object nicht mehr reagiert nur verlängert wurde.
Also kann mir trotzdem jemand hier helfen?
Danke und Gruss
Martin
Hallo,
soviel ich weiß, ist es nach Beendigung der physikalischen
Verbindung zum Server nicht mehr möglich das Connection-
Objekt am leben zu halten.
Ich würde mir eine Logik überlegen, die evtl. über einen
Timer versucht die Verbindung immer wieder herzustellen,
falls sie (physikalisch) ausfällt. Du musst halt den Fehler
abfangen und dann in die entsprechende Logik verzeweigen.
Das Funktioniert aber, denke ich, nur mit disconnectierten,
clientverwalteten Objekten. (Beachte adUseClient)
conn.CursorLocation = adUseClient
conn.ConnectionString = CONN\_STRING
conn.Open
Set rsEvents = New Recordset
Set rsEvents.ActiveConnection = conn
rsEvents.CursorType = adOpenKeyset
rsEvents.CursorLocation = adUseClient
rsEvents.Open "SELECT \* FROM Events"
Beim Updaten der Datensätze musst Du eine neue Connection
etablieren und erst wieder verbinden.
Ich hoffe es hilft.
Gruss CO
Hallo
Danke für Deine Antwort.
Das Problem ist ja, dass ich eigentlich möchte, dass die ISDN-Verbindung abgebaut wird (aus Kostengründen).
Wenn ich dann aber jedes mal wieder eine Connection aufbauen muss, dann wird die Geschichte etwas langsam …
Gruss
Martin
in diesem Fall ist aber der Aufbau
der physikalischen Verbindung (ISDN)
eindeutig das zeitraubendste.
Die Connection zum Server ist rel. schnell.
(je nach datenrate)
CO
Aw: Connection einfach links liegen lassen!
Hi Martin!
Eigentlich brauchst Du ja die Connection nach RecordSet-Zuweisung nicht mehr. Hier ein kleines Beispiel als Function:
Private Function GetData() As ADODB.Recordset
Dim adoConn As ADODB.Connection
Dim adoResult As ADODB.Recordset
Const strConn As String = "Blablabla"
Const strSQL As String = "Select \* From Table"
Set adoConn = New ADODB.Connection
Set adoResult = New ADODB.Recordset
adoResult.CurserLocation = adUseClient
adoResult.CurserType = adOpenKeySet
adoResult.LockType = adLockReadOnly
adoConn.Open strConn
Set adoResult.ActiveConnection = adoConn
adoResult.Open strSQL
Set adoResukt.ActiveConnection = Nothing
adoConn.Close
Set adoConn = Nothing
Set GetData = adoResult
Set adoResult = Nothing
End Function
Wenn Du das ganze updaten mußt, einfach das Recordset mit neuer Connection rückschreiben; Oder mit SQL-Update-Anweisung geht’s natürlich auch.
LG, Stefan.