VB6 und MS-SQL 7.x

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.