Avatar billede sblar Nybegynder
12. januar 2003 - 16:12 Der er 3 kommentarer og
1 løsning

Fejl når SQL-server er stoppet

Jeg forsøger i Access97 at sammenkæde en MSSQL tabel i VB v.h.a. CreateTabledef og TableDefs.Append. Det går også fint så længe SQL-serveren kører. Jeg har også indbygget fejlhåndtering hvis noget skulle gå galt. Idéen er at hvis min primære SQL-server er nede, skal den sammenkædede tabel pege på min sekundære (identiske) SQL-server.
Problemet opstår hvis SQL-serveren ikke kører. Da kommer der ingen kørselsfejl i Access (som jeg kan fange og reagere på), men istedet en fejl fra Microsoft SQl Server Logon, som jeg ikke kan fange i min kode.
Hvordan kan man checke om en server kører uden at få en fejl som kræver brugerhåndtering?

Her er koden:

Public Function ConnectSQLServer()
Dim strSQL As String
Dim dbs As Database, tdf As TableDef
Dim strConnect As String, strDSN As String
Dim UserID As String, Password As String
Dim Tries As Integer

On Error GoTo ErrorHandler

    DoCmd.Hourglass (True)
   
    Set dbs = CurrentDb
    Tries = 1
    DBEngine.LoginTimeout = 1
       
On Error Resume Next
    ' Fjern eksisterende kæde
    dbs.TableDefs.Delete ("Table1")
On Error GoTo ErrorHandler
   
    ' Prøv først primær server
    strDSN = "Server1"
    GoTo Connect
   
NextServer:
On Error GoTo 0
    ' Prøv anden server
    If Tries < 5 Then
        If strDSN = "Server1" Then
            strDSN = "Server2"
            Tries = Tries + 1
        Else
            strDSN = "Server1"
            Tries = Tries + 1
        End If
    Else
        ' Send alarm
        GoTo ErrorHandler
    End If

Connect:
    strConnect = "ODBC;DSN=" & strDSN & ";UID=sa;PWD=;DATABASE=DB1"
    Set tdf = dbs.CreateTableDef("Table1")
    tdf.Connect = strConnect
    tdf.SourceTableName = "Table1"
   
On Error GoTo NextServer
    dbs.TableDefs.Append tdf

On Error GoTo ErrorHandler
    dbs.TableDefs.Refresh
    ConnectSQLServer = True
 
ExitHandler:
    DoCmd.Hourglass (False)
    Exit Function

ErrorHandler:
  ConnectSQLServer = False
  LogEvent ("Det lykkedes ikke at få forbindelse til nogen af serverne. Fejl: " & Err.Number & " " & Err.Description)
  Resume ExitHandler
End Function
Avatar billede themastergk Nybegynder
12. januar 2003 - 16:16 #1
Har du "IeXIX"?? Der kan du nemlig checke det...

//TheMasterGK
Avatar billede sblar Nybegynder
12. januar 2003 - 16:25 #2
Har aldrig hørt om IeXIX - hvad er det?
Avatar billede faroe Nybegynder
13. januar 2003 - 09:26 #3
Med på en lytter:)
Avatar billede sblar Nybegynder
15. januar 2003 - 12:54 #4
Jeg fandt selv løsningen og bruger nu ADO og OLE DB til at teste om forbindelsen/serveren kører. På den måde undgår jeg at bruge ODBC og kan dermed fange en evt. fejl ved oprettelse af tilslutningen. Når først jeg har konstateret at forbindelsen er OK sammenkæder jeg mine servertabeller med ADO som vanligt.

'------------------------------------------------------------
' Tester at forbindelsen til en af SQL-serverne er OK
' Bruger ADO og kræver derfor reference til
' <Microsoft ActiveX Data Objects 2.0 Library> eller højere.
'------------------------------------------------------------
Public Function SQLServerConnected(ByRef ServerOK)
Dim Conn As ADODB.Connection
Dim strConnect As String, strSQLServer As String
Dim Tries As Integer

On Error GoTo ErrorHandler
    Set Conn = New ADODB.Connection
    ' Hent tilslutningsoplysninger fra systemtabellen
    GetSQLValues
On Error Resume Next

    Tries = 1
   
    ' Prøv først primær server
    strSQLServer = strSQLServer1
    GoTo Connect
   
NextServer:
    LogEvent ("Ingen forbindelse til " & strSQLServer)
    ' Prøv anden server
    If Tries < 5 Then
        If strSQLServer = strSQLServer1 Then
            strSQLServer = strSQLServer2
            Tries = Tries + 1
            Resume Connect
        Else
            strSQLServer = strSQLServer1
            Tries = Tries + 1
            Resume Connect
        End If
    Else
        GoTo ErrorHandler
    End If

Connect:
On Error GoTo NextServer
    strConnect = "Provider=sqloledb;Data Source=" & strSQLServer & ";Initial Catalog=" & strSQLDB & ";User Id=" & strSQLUser & ";Password=" & strSQLPassword
    Conn.Open strConnect
    ' Hvis vi når hertil er alt OK, returnér reference til den kørende server.
    ServerOK = strSQLServer
    SQLServerConnected = True

ExitHandler:
On Error Resume Next
    Conn.Close
    Set Conn = Nothing
    Exit Function

ErrorHandler:
  SQLServerConnected = False
  Resume ExitHandler

End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester