簡體   English   中英

使用ADO / DAO連接從SQL Server下載數據

[英]Using ADO/DAO Connection to Download data from SQL Server

我試圖弄清楚如何使用Access VBA中的ADO / DAO連接下載以從SQL Server獲取表的內容。 我試圖避免使用鏈接表,因為數據庫需要密碼,而且我一直遇到問題,使其不詢問登錄信息。 在這件事上,我有什么想法或參考可以開始嗎?

您將需要提供SQL憑據的兩種方式出現。

沒有鏈接表,還有更多的事情要做,基本上,您希望對源和“目標”表的記錄集進行迭代。

targetrs = CurrentDb.OpenRecordset("Target", dbOpenTable)

Dim Con As New ADODB.Connection
Dim sqlStr As String 
    Con.Open _
        "Provider = sqloledb;" & _
        "Data Source=SqlServer;" & _
        "Initial Catalog=MyDB;" & _
        "User ID=sa;" & _
        "Password=p@ssW0rd;"

Dim rsSource As New ADODB.Recordset 
    rsSource.Open "select * from SOURCE", Con

    do until rsSource.eof
        targetrs.addnew
        for each field in rsSource
            targetrs.fields(field.Name) = rsSource.fields(field.Name)
        next
        targetrs.update
        rssource.movenext
    loop

由於仍然需要憑據,因此可以動態鏈接表:

docmd.TransferDatabase acLink,"ODBC Database",
"ODBC;Driver={SQL Server};Server=MySQLServer;Database=MYSQLDB;
Uid=USER;Pwd=PASSWORD",acTable,"SQLtable","MyAccessTable"

使用鏈接表不需要您在該鏈接表中存儲或擁有用戶密碼。

如果您在應用程序啟動時執行單次登錄,則所有鏈接表都將起作用。

鏈接的表無需提示輸入用戶名或密碼即可工作。

鏈接表無需您在鏈接中存儲用戶ID或密碼即可使用。

如果您按照此處的說明登錄,Access將緩存用戶名和密碼:

http://blogs.office.com/b/microsoft-access/archive/2011/04/08/power-tip-improve-the-security-of-database-connections.aspx

因此,要將表下載到本地,則只需要以下代碼:

對於新的本地表(創建表查詢):

CurrentDb.Execute "SELECT * INTO LocalTableCreate FROM ServerTable"

追加到現有表:

CurrentDb.Execute "INSERT INTO LocalTable SELECT * FROM ServerTable"

如果存在一些確實很奇怪的原因和欲望,就會造成並加劇世界貧困,而事情會像烏龜一樣費勁地浪費時間而不使用鏈接表嗎?

好了,您可以通過“傳輸數據庫”命令創建一個鏈接表。 只需在上面的代碼前面多一行代碼,然后再次使用上面的兩個示例就可以了。

但是,我看不到創建或刪除鏈接表的優勢。

我想是出於性能方面的原因,還是出於安全性方面的考慮,或者出於合理原因,您不提前知道表格? 然后,我建議您使用保存的直通查詢,因為性能會更快。

因此,您可以使用以下代碼:

Dim qdfPass       As DAO.QueryDef 
Set qdfPass = CurrentDb.QueryDefs("MyPass") 
qdfPass.SQL = "select * from dbo.MyTable;" 


CurrentDb.Execute "INSERT INTO LocalTable SELECT * FROM MyPass”

請注意,上述qerydef中使用的sql必須是本機T-SQL,並且可以是視圖甚至是存儲過程,例如:

qdfPass.SQL = "exec sp_myCoolStoreProc;" 

而且存儲過程甚至可以傳遞如下參數:

qdfPass.SQL = "exec sp_myCoolStoreProc " & strMyParam

接着 :

CurrentDb.Execute "INSERT INTO LocalTable SELECT * FROM MyPass”

因此,通過執行上述操作,我們甚至可以在存儲過程中使用select into / append方法,並且表/ sql服務器端是動態的,甚至可以是存儲過程。 再次非常小的代碼。

我建議您避免此處提出的編寫記錄集循環代碼的想法,除非有人真的希望在不需要循環代碼的情況下編寫循環代碼。 如果使用這樣的循環,則類似PK之類的事情必須在代碼中單獨處理,因為可能需要跳過本地pk列(您只需將該列排除在選擇SQL之外)即可。

再次注意,通過使用上面顯示如何“登錄” SQL Server的鏈接,為通過查詢保存的連接字符串不需要用戶ID和密碼。 而且,如果該表是已知的,則此處再次保存一個表鏈接或通過查詢就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM