Jak vytvořit připojení bez DSN k SQL Server pro propojené tabulky v Accessu

Pokročilé: Vyžaduje odborné kódování, interoperabilitu a víceuživatelské dovednosti.

Tento článek se týká pouze databáze Microsoft Access (.accdb a .mdb).

Úvod

Tento článek popisuje, jak vytvořit připojení k Microsoft SQL Server pro propojené tabulky v Microsoft Accessu, které nepoužívají název zdroje dat (DSN). Označuje se také jako připojení bez DSN.

Další informace

Název DSN můžete použít k vytvoření propojených tabulek SQL Server v Microsoft Accessu. Když ale databázi přesunete do jiného počítače, musíte na tomto počítači znovu vytvořit název DSN. Tento postup může být problematický, pokud ho potřebujete provést na více počítačích. Pokud tento postup není proveden správně, propojené tabulky nemusí být schopny najít DSN. Propojené tabulky se proto nemusí připojit k SQL Server.

Pokud chcete vytvořit odkaz na tabulku SQL Server, ale nechcete pevně zakódovat název DSN v dialogovém okně Zdroje dat, pomocí jedné z následujících metod vytvořte připojení k SQL Server bez DSN.

Metoda 1: Použití metody CreateTableDef

Metoda CreateTableDef umožňuje vytvořit propojenou tabulku. Pokud chcete použít tuto metodu, vytvořte nový modul a pak do nového modulu přidejte následující funkci AttachDSNLessTable.

'//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

Další informace o parametrech metody CreateTableDef najdete v tématu Database.CreateTableDef – metoda (DAO).

Pokud chcete volat funkci AttachDSNLessTable, přidejte do makra Auto-Exec nebo ve spouštěcím formuláři Form_Open událostí kód podobný jednomu z následujících příkladů kódu:

  • Při použití makra Auto-Exec zavolejte funkci AttachDSNLessTable a pak předejte parametry podobné následujícímu z akce SpustitCode.

        AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
    
  • Při použití spouštěcího formuláře přidejte k události Form_Open kód podobný následujícímu.

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

Poznámka Při přidávání více než jedné propojené tabulky do accessové databáze je nutné upravit logiku programování.

Metoda 2: Použijte dao. Metoda RegisterDatabase

The DAO. Metoda RegisterDatabase umožňuje vytvořit připojení DSN v makre auto-Exec nebo ve spouštěcím formuláři. I když tato metoda neodebere požadavek na připojení DSN, pomůže vám vyřešit problém vytvořením připojení DSN v kódu. Pokud chcete použít tuto metodu, vytvořte nový modul a pak do nového modulu přidejte následující funkci CreateDSNConnection.

'//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

Poznámka Pokud je metoda RegisterDatabase volána znovu, DSN se aktualizuje.

Pokud chcete volat funkci CreateDSNConnection, přidejte do makra Auto-Exec nebo ve spouštěcím formuláři Form_Open událostí kód podobný jednomu z následujících příkladů kódu:

  • Když použijete makro Auto-Exec, zavolejte funkci CreateDSNConnection a pak předejte parametry podobné následujícímu z akce SpustitCode.

        CreateDSNConnection ("(local)", "pubs", "", "")
    
  • Při použití spouštěcího formuláře přidejte k události Form_Open kód podobný následujícímu.

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

Poznámka

Tato metoda předpokládá, že jste již vytvořili SQL Server propojených tabulek v databázi Accessu pomocí názvu názvu DSN myDSN.