DSN-yhteyden luominen SQL Serveriin Accessin linkitettyjä taulukoita varten

Huomautus

Office 365 ProPlus nimetään uudelleen Microsoft 365 Apps for enterprise -sovellukseksi. Lisätietoja tästä muutoksesta on tässä blogikirjoituksessa.

Lisäasetukset: Edellyttää asiantuntijakoodausta, yhteentoimivuutta ja yhteiskäyttötaitoja.

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

Johdanto

Tässä artikkelissa kuvataan yhteyden luominen Microsoft SQL Serveriin Microsoft Accessissa linkitetyille taulukoille, jotka eivät käytä tietolähteen nimeä (DSN). Tätä kutsutaan myös DSN-yhteydeksi.

Lisätietoja

Voit luoda linkitettyjä SQL Server -taulukoita Microsoft Accessissa DSN:n avulla. Kun siirrät tietokannan toiseen tietokoneeseen, sinun on luotava DSN uudelleen tähän tietokoneeseen. Tämä voi olla ongelmallista, kun sinun on suoritettava se vähintään yhdessä tietokoneessa. Kun tätä toimenpidettä ei suoriteta oikein, linkitetyt taulukot eivät ehkä löydä DSN:tä. Tästä syystä linkitetyt taulukot eivät ehkä voi muodostaa yhteyttä SQL Serveriin.

Kun haluat luoda linkin SQL Server -taulukkoon, mutta et halua kovakoodata DSN:ää Tietolähteet-valintaikkunassa, luo DSN-yhteys SQL Serveriin yhdellä seuraavista tavoista.

Menetelmä 1: CreateTableDef-menetelmän käyttö

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

Jos haluat kutsua AttachDSNLessTable-funktiota, lisää koodi, joka on samanlainen kuin jokin seuraavista koodiesimerkeistä Auto-Exec-makrossa tai käynnistyslomakkeen Form_Open tapahtumassa:

  • Kun käytät Auto-Exec-makroa, kutsu AttachDSNLessTable-funktiota ja ohita sitten SuoritaKoodi-toiminnon parametrit, jotka muistuttavat seuraavaa.

        AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
    
  • Kun käytät käynnistyslomaketta, lisää koodi, joka muistuttaa seuraavaa, Form_Open tapahtumaan.

    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 Sinun on säätää ohjelmointilogiikkaa, kun lisäät Access-tietokantaan useamman kuin yhden linkitetyn taulukon.

Menetelmä 2: Käytä DAO:ta. RegisterDatabase-menetelmä

The DAO. RegisterDatabase-menetelmän avulla voit luoda DSN-yhteyden automaattisen exec-makron tai käynnistyslomakkeen avulla. Vaikka tämä menetelmä ei poista DSN-yhteyden vaatimusta, se auttaa 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 korjauksen makrossa tai käynnistyslomakkeen Form_Open tapahtumassa:

  • Kun käytät Auto-Exec-makroa, kutsu CreateDSNConnection-funktiota ja ohita sitten SuoritaKoodi-toiminnolla parametrit, jotka muistuttavat seuraavaa.

        CreateDSNConnection ("(local)", "pubs", "", "")
    
  • Kun käytät käynnistyslomaketta, lisää koodi, joka muistuttaa seuraavaa, Form_Open tapahtumaan.

    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 Serverin linkitetyt taulukot Access-tietokantaan käyttämällä DSN-nimenä "myDSN".