[英]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將緩存用戶名和密碼:
因此,要將表下載到本地,則只需要以下代碼:
對於新的本地表(創建表查詢):
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.