2017-09-01 94 views
0

我認爲這有一個簡單的答案,但我瘋狂地試圖谷歌的答案。 我有一個Excel工具,通過VBA從Access數據庫下載數據。到目前爲止,除了當我嘗試更新數據時,所有這些工作都很好。通過Excel更新訪問數據

我認爲問題是我通過QueryTable導入數據。我似乎無法得到一個簡單的代碼來運行以下命令:

  1. 創建連接到Access數據庫表
  2. 刪除表中
  3. 運行的「INSERT INTO」查詢所有項目同桌

這裏是我的代碼:

Set obj = ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(_ 
    "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=" & cPath & ";Mode=ReadWrite"), Destination:=Range("W6")).QueryTable 
With obj 
    .CommandType = xlCmdSql 
    .CommandText = Array(cRng.Offset(3, 0).Value) 
    .PreserveFormatting = True 
    .BackgroundQuery = True 
    .RefreshStyle = xlInsertDeleteCells 
    .SaveData = True 
    .PreserveColumnInfo = True 
    .SourceDataFile = cPath 
    .ListObject.DisplayName = cName 
    .Refresh BackgroundQuery:=False 
End With 

其中,

CPATH = Access數據庫的路徑

cRng = Excel中使用SELECT查詢電池(這只是正常)

CNAME =表的名稱/對象

我然後運行兩個 「與目標文件」 s到使用DELETE和INSERT INTO查詢更新.CommandText,但這是Excel表示無法運行查詢的地方。

任何想法?我知道答案可以非常簡單。

謝謝!

+0

請在您的問題中包含完整的查詢文字。此外,請確保您的Excel文件在單元格中沒有任何非ASCII字符(Excel傾向於添加一個字符來對齊事物,一個簡單的檢查就是將其複製並粘貼到即時窗口中,並檢查意外的問題標記)。 –

+0

它們是非常簡單的查詢:「SELECT * from tbl_Date」,「DELETE * from tbl_Date」,「INSERT INTO tbl_Date VALUES('7/7/2017')」 – ddelpinal

回答

0

執行查詢的方式適用於返回結果的查詢,但不適用於操作查詢,因爲它們不返回任何內容,因此Excel無法使用結果創建表。

您可以使用ADO執行查詢(您可以保留您的選擇查詢,並將其用於插入和刪除)。您需要在Excel中設置對Microsoft ActiveX數據對象的引用(或修改代碼以使用後期綁定)。

Dim conn As New ADODB.Connection 
Dim adoRS As New ADODB.Recordset 
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=" & cPath & ";Mode=ReadWrite" 
adoRS.Open cRng.Offset(3, 0).Value, conn 
adoRS.Close 
conn.Close 

此外,您INSERT查詢包含無效的SQL(你有沒有指定的列,假設你插入日期字段,你有沒有正確分隔日期(他們#分隔) ,建議使用YYYY/MM/DD日期格式以避免出現語言環境錯誤)。

INSERT INTO tbl_Date(MyDateColumn) VALUES (#2017/07/07#) 
0

試試這個方法。

Sub RunQueriesInAccess() 

    Dim AC As Object 
    Set AC = CreateObject("Access.Application") 
    Dim strDatabasePath As String 
    strDatabasePath = ThisWorkbook.Path & "\Your_Database.accdb" 

    With AC 
     .OpenCurrentDatabase (strDatabasePath) 
     Dim db As Object 
     Set db = .CurrentDb 
     .DoCmd.SetWarnings False 
     .DoCmd.OpenQuery "Query1" 
     .DoCmd.OpenQuery "Query2" 
     Dim qry As Object 
     Set qry = db.QueryDefs("Parameter_Query") 
     qry.Parameters(0) = Worksheets("Sheet1").Range("A1").Value 
     qry.Execute 

     .DoCmd.SetWarnings True 
     .Quit 
    End With 
    ActiveWorkbook.RefreshAll 
End Sub