2013-07-08 51 views
1

現在我有一個MS SQL數據庫,其中有大約50個左右的表,我希望使用DSN Less連接到MS Access。下面是我有一個stRemoteTableName參數的基本代碼,它是要導入的SQL表的表名。我可以每次爲每張桌子調用這個函數,但這會花費很長時間;無論如何循環遍歷SQL數據庫中的所有表並將它們傳遞給此函數以便導入所有表?我很難在網上查找任何代碼,因此非常感謝幫助。DSN-Less與多個表的連接

Private Sub ImportAllTables(stRemoteTableName) 
     On Error GoTo AttachDSNLessTable_Err 
      Dim td As TableDef 
      Dim stConnect As String 
      stServer = "C:\Location" 
      stDatabase = "DB" 
      stLocalTableName = stRemoteTableName 
      stUsername = "" 

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

      stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes" 

      Set td = CurrentDb.CreateTableDef(stLocalTableName, stRemoteTableName, stConnect) 
      CurrentDb.TableDefs.Append td 
      Exit Sub 

     AttachDSNLessTable_Err: 

      AttachDSNLessTable = False 
      MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.Description 
     End Sub 
+0

您可以爲所有的表名查詢:http://stackoverflow.com/questions/3913620/get-all-table-names-of-a-particular-database-by-sql-query –

回答

1

您可以使用傳遞查詢來列出SQL Server數據庫中的表名。根據該查詢打開一個記錄集。然後遍歷記錄集行並鏈接每個表。

Dim db As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim rs As DAO.Recordset 
Dim strConnect As String 
Dim strSelect As String 

strSelect = "SELECT t.name FROM sys.tables t;" 
'strConnect = <you already have this as stConnect> 
Set db = CurrentDb 
Set qdf = db.CreateQueryDef("", strSelect) 
qdf.Connect = strConnect 
Set rs = qdf.OpenRecordset 
With rs 
    Do While Not .EOF 
     ' you want to link; I will just list 
     ' the table names 
     Debug.Print !name 
     .MoveNext 
    Loop 
    .Close 
End With 
Set rs = Nothing 
Set qdf = Nothing 
Set db = Nothing 
+0

謝謝你非常非常,我一直在學習,只進入大學三年級,我所做的唯一編程是VB和VBA(非常有限)。 – codingManiac

+0

不客氣。大部分是相當標準的Access VBA。傳遞查詢似乎不太熟悉AFAICT的許多人。這一切對你有意義嗎? – HansUp

+0

是的,我現在看到你的代碼並查看MS支持上的一些內容,現在我更瞭解它了,但我必須同意你的看法。儘管我聽說過他們,但我從來不必處理傳遞查詢。 – codingManiac