Avatar billede erik_l Juniormester
13. september 2023 - 22:15 Der er 4 kommentarer og
1 løsning

odbc forbindelse til sql database på .net

Hejsa
Jeg har adgang til en sql database på en .net adresse, via excel, jeg vil gerne have forbindelse til den samme database via access, men jeg kan ikke oprettet en "almindelig" odbc forbindelse .... er der en som har et bud på hvordan jeg får forbundet access til sql databasen, serveren hedder "XXXXXX".database.windows.net  ?
Avatar billede Gustav Ekspert
14. september 2023 - 10:07 #1
Det er en Azure SQL Server. Den kræver, at servernavnet indgår i brugernavnet.

Åbn Eksterne data, Ny datakilde, Fra database, Fra Azure-database
og link dine tabeller.

Til vedligeholdelse bruger vi disse to funktioner:
Public Function AttachSqlServer( _
    ByVal Hostname As String, _
    ByVal Database As String, _
    ByVal UserName As String, _
    ByVal PassWord As String) _
    As Boolean

' Attach all tables linked via ODBC to SQL Server or Azure SQL.
' 2016-04-24. Cactus Data ApS, CPH.

    Const cstrDbType    As String = "ODBC"
    Const cstrAcPrefix  As String = "dbo_"

    Dim dbs            As DAO.Database
    Dim tdf            As DAO.TableDef
    Dim qdf            As DAO.QueryDef
   
    Dim strConnect      As String
    Dim strName        As String
   
    On Error GoTo Err_AttachSqlServer
   
    Set dbs = CurrentDb
    strConnect = ConnectionString(Hostname, Database, UserName, PassWord)
   
    For Each tdf In dbs.TableDefs
        strName = tdf.Name
        If Asc(strName) <> Asc("~") Then
            If InStr(tdf.Connect, cstrDbType) = 1 Then
                If Left(strName, Len(cstrAcPrefix)) = cstrAcPrefix Then
                    tdf.Name = Mid(strName, Len(cstrAcPrefix) + 1)
                End If
                tdf.Connect = strConnect
                tdf.RefreshLink
                Debug.Print Timer, tdf.Name, tdf.SourceTableName, tdf.Connect
                DoEvents
            End If
        End If
    Next
   
    For Each qdf In dbs.QueryDefs
        If qdf.Connect <> "" Then
            Debug.Print Timer, qdf.Name, qdf.Type, qdf.Connect
            qdf.Connect = strConnect
        End If
    Next
    Debug.Print "Done!"
   
    AttachSqlServer = True
   
Exit_AttachSqlServer:
    Set tdf = Nothing
    Set dbs = Nothing
    Exit Function
   
Err_AttachSqlServer:
    Call ErrorMox
    Resume Exit_AttachSqlServer
   
End Function[\pre]

[pre]Public Function ConnectionString( _
    ByVal Hostname As String, _
    ByVal Database As String, _
    ByVal UserName As String, _
    ByVal PassWord As String) _
    As String

' Create ODBC connection string from its variable elements.
' 2018-10-02. Cactus Data ApS, CPH.

    Const AzureDomain  As String = ".windows.net"
    Const OdbcConnect  As String = _
        "ODBC;" & _
        "DRIVER={ODBC Driver 18 for SQL Server};" & _
        "Description=DM Administration;" & _
        "APP=Microsoft® Access;" & _
        "SERVER={0};" & _
        "DATABASE={1};" & _
        "UID={2};" & _
        "PWD={3};" & _
        "Trusted_Connection={4};"
       
    Dim FullConnect    As String
   
    If Right(Hostname, Len(AzureDomain)) = AzureDomain Then
        ' Azure SQL connection.
        ' Append servername to username.
        UserName = UserName & "@" & Split(Hostname)(0)
    End If
    FullConnect = OdbcConnect
    FullConnect = Replace(FullConnect, "{0}", Hostname)
    FullConnect = Replace(FullConnect, "{1}", Database)
    FullConnect = Replace(FullConnect, "{2}", UserName)
    FullConnect = Replace(FullConnect, "{3}", PassWord)
    FullConnect = Replace(FullConnect, "{4}", IIf(UserName & PassWord = "", "Yes", "No"))
   
    ConnectionString = FullConnect

End Function
Avatar billede erik_l Juniormester
14. september 2023 - 13:43 #2
Hej Gustav
Tak for lynhurtigt svar "Åbn Eksterne data, Ny datakilde, Fra database, Fra Azure-database
og link dine tabeller." den del er jeg med på, men uanset hvordan jeg sætter oplysningerne ind, melder den fejl når forbindelsen skal testes...
"Connection failed:
SQLState: '08004'
SQL Server Error:916
Server rejected the connecton: Access to selected database har
been denied"

Det virker når jeg tilslutter fra Excel, så jeg forstår ikke hvorfor ikke det virker fra Access ? .... har du et bud på om der mangler noget et eller andet sted ?
Avatar billede Gustav Ekspert
14. september 2023 - 14:02 #3
Forkert brugernavn eller adgangskode er det mest sandsynlige, eller også er kryptering slået fra.

Det kan være nemmere at vælge: Styring af sammenkædede tabeller, Tilføj
Dér kan du specificere, at kryptering skal være slået til (kræves af Azure SQL), og at du har tillid til serverens certifikat.
Avatar billede erik_l Juniormester
14. september 2023 - 21:05 #4
Brugernavn og password virker fint via excel, så det er ikke der skoen trykker.

jeg har lige forsøgt via styring af sammenkædede tabeller, det virker desværre ikke, men jeg ser heller ikke nogen steder hvor jeg kan vælge noget kryptering.

Tak for forsøget
Avatar billede Gustav Ekspert
15. september 2023 - 10:24 #5
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