DSN-yhteyden luominen linkitettyjen taulukoiden SQL Server varten Accessissa

Edistynyt: Edellyttää asiantuntijakoodausta, yhteentoimivuutta ja monikäyttöosaamista.

Tämä artikkeli koskee vain Microsoft Access -tietokantaa (.accdb ja .mdb).

Johdanto

Tässä artikkelissa kerrotaan, miten voit luoda Microsoft SQL Server -yhteyden Microsoft Accessin linkitetyille taulukoille, jotka eivät käytä tietolähteen nimeä (DSN). Sitä kutsutaan myös DSN:ä pienemmäksi yhteydeksi.

Lisätietoja

DSN:n avulla voit luoda linkitettyjä SQL Server taulukoita Microsoft Accessissa. Kun siirrät tietokannan toiseen tietokoneeseen, sinun on luotava DSN uudelleen kyseisessä tietokoneessa. Tämä toiminto voi olla ongelmallinen, kun se on suoritettava useammassa kuin yhdessä tietokoneessa. Kun tämä toimintosarja ei toimi oikein, linkitetyt taulukot eivät ehkä löydä DSN:n sijaintia. Tämän vuoksi linkitetyt taulukot eivät ehkä voi muodostaa yhteyttä SQL Server.

Kun haluat luoda linkin SQL Server taulukkoon, mutta et halua pysyväiskoodata DSN:tä Tietolähteet-valintaikkunassa, voit luoda SQL Server DSN-yhteyden jollakin seuraavista tavoista.

Tapa 1: CreateTableDef-menetelmän käyttäminen

CreateTableDef-menetelmän avulla voit luoda linkitetyn taulukon. Jos haluat käyttää tätä menetelmää, luo uusi moduuli ja lisää sitten seuraava AttachDSNLessTable-funktio uuteen moduuliin.

'//Name     :   AttachDSNLessTable
'//Purpose  :   Create a linked table to SQL Server without using a DSN
'//Parameters
'//     stLocalTableName: Name of the table that you are creating in the current database
'//     stRemoteTableName: Name of the table that you are linking to on the SQL Server database
'//     stServer: Name of the SQL Server that you are linking to
'//     stDatabase: Name of the SQL Server database that you are linking to
'//     stUsername: Name of the SQL Server user who can connect to SQL Server, leave blank to use a Trusted Connection
'//     stPassword: SQL Server user password
Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String)
    On Error GoTo AttachDSNLessTable_Err
    Dim td As TableDef
    Dim stConnect As String

For Each td In CurrentDb.TableDefs
        If td.Name = stLocalTableName Then
            CurrentDb.TableDefs.Delete stLocalTableName
        End If
    Next

If Len(stUsername) = 0 Then
        '//Use trusted authentication if stUsername is not supplied.
        stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"
    Else
        '//WARNING: This will save the username and the password with the linked table information.
        stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword
    End If
    Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
    CurrentDb.TableDefs.Append td
    AttachDSNLessTable = True
    Exit Function

AttachDSNLessTable_Err:

AttachDSNLessTable = False
    MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.Description

End Function

Lisätietoja CreateTableDef-menetelmän parametreista on kohdassa Database.CreateTableDef-menetelmä (DAO).

Jos haluat kutsua AttachDSNLessTable-funktiota, lisää koodi, joka on samankaltainen kuin jokin seuraavista koodiesimerkeistä automaattisen suoritustoiminnon makrossa tai käynnistyslomakkeessa Form_Open tapahtuma:

  • Kun käytät automaattinen suoritus -makroa, kutsu AttachDSNLessTable-funktiota ja välitä suoritaKoodi-toiminnossa seuraavankaltaiset parametrit.

        AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
    
  • Kun käytät käynnistyslomaketta, lisää koodi, joka on samankaltainen kuin seuraava Form_Open-tapahtuma.

    Private Sub Form_Open(Cancel As Integer)
        If AttachDSNLessTable("authors", "authors", "(local)", "pubs", "", "") Then
            '// All is okay.
        Else
            '// Not okay.
        End If
    End Sub
    

Huomautus Ohjelmointilogiikkaa on muokattava, kun Access-tietokantaan lisätään useita linkitettyjä taulukoita.

Tapa 2: DAO:n käyttäminen. RegisterDatabase-menetelmä

The DAO. RegisterDatabase-menetelmän avulla voit luoda DSN-yhteyden automaattisessa suoritettavassa makrossa tai käynnistyslomakkeessa. Vaikka tämä menetelmä ei poista DSN-yhteyden vaatimusta, se auttaa sinua ratkaisemaan ongelman luomalla DSN-yhteyden koodissa. Jos haluat käyttää tätä menetelmää, luo uusi moduuli ja lisää sitten seuraava CreateDSNConnection-funktio uuteen moduuliin.

'//Name     :   CreateDSNConnection
'//Purpose  :   Create a DSN to link tables to SQL Server
'//Parameters
'//     stServer: Name of SQL Server that you are linking to
'//     stDatabase: Name of the SQL Server database that you are linking to
'//     stUsername: Name of the SQL Server user who can connect to SQL Server, leave blank to use a Trusted Connection
'//     stPassword: SQL Server user password
Function CreateDSNConnection(stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String) As Boolean
    On Error GoTo CreateDSNConnection_Err

Dim stConnect As String

If Len(stUsername) = 0 Then
        '//Use trusted authentication if stUsername is not supplied.
        stConnect = "Description=myDSN" & vbCr & "SERVER=" & stServer & vbCr & "DATABASE=" & stDatabase & vbCr & "Trusted_Connection=Yes"
    Else
        stConnect = "Description=myDSN" & vbCr & "SERVER=" & stServer & vbCr & "DATABASE=" & stDatabase & vbCr 
    End If

DBEngine.RegisterDatabase "myDSN", "SQL Server", True, stConnect

'// Add error checking.
    CreateDSNConnection = True
    Exit Function
CreateDSNConnection_Err:

CreateDSNConnection = False
    MsgBox "CreateDSNConnection encountered an unexpected error: " & Err.Description

End Function

Huomautus Jos RegisterDatabase-menetelmää kutsutaan uudelleen, DSN päivitetään.

Jos haluat kutsua CreateDSNConnection-funktiota, lisää koodi, joka on samankaltainen kuin jokin seuraavista koodiesimerkeistä automaattisen suoritustoiminnon makrossa tai käynnistyslomakkeessa tapahtuman Form_Open:

  • Kun käytät Automaattinen suoritus -makroa, kutsu CreateDSNConnection-funktiota ja välitä suoritaKoodi-toiminnossa seuraavankaltaiset parametrit.

        CreateDSNConnection ("(local)", "pubs", "", "")
    
  • Kun käytät käynnistyslomaketta, lisää koodi, joka on samankaltainen kuin seuraava Form_Open-tapahtuma.

    Private Sub Form_Open(Cancel As Integer)
        If CreateDSNConnection("(local)", "pubs", "", "") Then
            '// All is okay.
        Else
            '// Not okay.
        End If
    End Sub
    

Huomautus

Tässä menetelmässä oletetaan, että olet jo luonut SQL Server linkitetyt taulukot Access-tietokannassa käyttämällä DSN-nimenä myDSN-nimeä.