簡體   English   中英

你如何使用 VBA JOIN 從 Excel 表更新 SQL 表

[英]How do you UPDATE SQL Table from Excel Table using VBA JOIN

我已通讀Stackoverflow 14814098 帖子,並想知道 (2) 件事。

  1. 您能否通過使用引用 Excel 表的更新語句創建字符串來從 Excel 更新 MS SQL 表。 下面是我的意思 VBA 中的粗略想法。

  2. 如果將 SQL 語句添加到服務器,如何使用 VBA 從 Excel 調用它?

背景:我正在嘗試從 MS SQL 服務器中提取一個表,將結果作為 Excel 表加載到 Excel 表中,我可以在其中退出表並更新所有更改回服務器表。

  • 我設置了 class 和工作表模塊以在工作表中的單個單元格更改后更新服務器,但現在我想一次更新所有更改。 go 有沒有更好的方法來獲得結果?
Sub UpdateSqlWithExcelTableJoin()
    
    Dim cmd    As ADODB.Command
    Dim strSQL As String

    Set cnn = New ADODB.Connection
    cnn.ConnectionString = "DRIVER=SQL Server;SERVER=MYSERVERNAME;DATABASE=MYDATABASENAME;Trusted_Connection=Yes"
    Set cmd = New ADODB.Command
    
    cnn.Open
    cmd.ActiveConnection = cnn
    cmd.CommandType = adCmdText
    
    Call setString2

    cmd.CommandText = strSQLUpdate
    cmd.Execute
    cnn.Close

    Set cmd = Nothing
    Set cnn = Nothing
    
End Sub
    Sub setString2()
strSQLUpdate = _
    "Update test.profile " & vbNewLine & _
    "Set test.profile.Field = ExcelTable.Field " & vbNewLine & _
    "    test.profile.Profile_Name = ExcelTable.Profile_Name " & vbNewLine & _
    "From test.profile " & vbNewLine & _
    "INNER JOIN OPENROWSET('MICROSOFT.JET.OLEDB.4.0', 'Excel 8.0;Database=C:\Users\USERNAME\ONEDRIVE - FOLDER\SQL_VBA_b.xlsm;', 'Select ID, Profile_Name' " & vbNewLine & _
    "From '[Sheet3$]') As ExcelTable " & vbNewLine & _
    "ON test.profile.ID = ExcelTable.ID " & vbNewLine & _
    "WHERE (test.profile.ID = ExcelTable.ID " & vbNewLine & _
    "    AND test.profile.Profile_Name = ExcelTable.Profile_Name)"
    
Debug.Print strSQLUpdate
End Sub

我總是發現通過 MS-Access 連接運行它比直接連接到 SQL 服務器更容易。

  1. 使用兩個 ODBC 連接設置 Acess 數據庫。 A. 將 Excel 數據定義為要訪問的表。 B. 將 SQL Server 表定義為要訪問的表。
  2. 在 Excel VBA 中更改您的 ADOdb 連接以連接到 Access db。
  3. 現在您可以在 ODBC SQL 中運行單個更新語句,如下所示: Update SQLServerTable Set SQLServerColumn = ExcelColumn From SQLServerTable S Inner Join ExcelTable E Where sqlServerkey = ExcelKey

這比直接嘗試更靈活,因為如果更新關系變得更復雜,您始終可以將 FROM 子句編碼為 Access 保存的查詢,這是在 ODBC 中進行嵌套查詢的唯一好方法(使用其他查詢的查詢從)。

您不能在 position 處使用 select 它總是會占用整張紙。

此外,您在 Field 之后缺少逗號

Update test.profile 
Set test.profile.Field = ExcelTable.Field, 
    test.profile.Profile_Name = ExcelTable.Profile_Name 
From test.profile 
INNER JOIN OPENROWSET('MICROSOFT.JET.OLEDB.4.0', 'Excel 8.0;Database=C:\Users\USERNAME\ONEDRIVE - FOLDER\SQL_VBA_b.xlsm;', [Sheet3$]) As ExcelTable 
ON test.profile.ID = ExcelTable.ID 
WHERE (test.profile.ID = ExcelTable.ID 
    AND test.profile.Profile_Name = ExcelTable.Profile_Name)
  1. ado 從 SQL 檢索記錄
  2. 保存 excel 文件
  3. 在 Access 中添加 excel 文件和 SQL 表
  4. 使用鏈接表(sql 和 excel)創建更新查詢
  5. 打開工作簿/更新數據/關閉工作簿/運行查詢。

暫無
暫無

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

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