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.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro