2015-12-02 123 views
0

我想在所有ms訪問表(我將導入)中添加4列,然後根據我選擇的查詢結果更新它們。但是,我的更新查詢不起作用。任何人都可以請看看,讓我知道了解決方案在MS Access VBA中使用選擇查詢更新查詢

感謝

Dim db As DAO.Database 
    Dim objtbl As DAO.TableDef 
    Dim sqlstr As String 
    Dim rs As DAO.Recordset 
    Dim sq2 As DAO.Recordset 
    Dim sq3 As DAO.Recordset 
    Dim sq4 As DAO.Recordset 
    Dim sq5 As DAO.Recordset 
    Set db = CurrentDb 
    On Error Resume Next 
    For Each objtbl In db.TableDefs 
    db.Execute "ALTER TABLE " & "[" & objtbl.Name & "]" & " ADD COLUMN  [Account] Text;" 
    db.Execute "ALTER TABLE " & "[" & objtbl.Name & "]" & " ADD COLUMN [Account_Serial] Text;" 
    db.Execute "ALTER TABLE " & "[" & objtbl.Name & "]" & " ADD COLUMN [Invoice_Date] Text;" 
    db.Execute "ALTER TABLE " & "[" & objtbl.Name & "]" & "ADD Column [LOB] Text;" 
    db.Execute "ALTER TABLE " & "[" & objtbl.Name & "]" & "ADD Column [LOB] Text;" 
    q = "Select [Field3] from " & "[" & objtbl.Name & "]" & " Where " & "[" & objtbl.Name & "].[Field1] = ""CUSTOMERRECORD"";" 
    Set rs = CurrentDb.OpenRecordset("Select [Field3] from " & "[" & objtbl.Name & "]" & " Where " & "[" & objtbl.Name & "].[Field1] = ""CUSTOMERRECORD"";") 
    Set sq2 = CurrentDb.OpenRecordset("Select Field4 from " & "[" & objtbl.Name & "]" & "Where" & "[" & objtbl.Name & "].[Field1] = ""CUSTOMERRECORD"";") 
    Set sq3 = CurrentDb.OpenRecordset("Select Field5 from" & "[" & objtbl.Name & "]" & "Where" & "[" & objtbl.Name & "].[Field1] = ""Customerrecord"";") 
    Set sq4 = CurrentDb.OpenRecordset("Select Field6 from" & "[" & objtbl.Name & "]" & "Where" & "[" & objtbl.Name & "].[Field1] = ""Customerrecord"";") 
    db.Execute 
    db.Execute "Update " & "[" & objtbl.Name & "] SET " & "[" & objtbl.Name & "].[Account] = " & rs!Field3 & ";" 
Next 

回答

0

訪問可能不會立即反映您對錶進行,除非你刷新數據庫窗口的變化。

嘗試添加命令Application.RefreshDatabaseWindow在更改表格之後以及打開記錄集之前。

0

請從您的代碼中刪除On Error Resume Next。然後修復您將獲得的所有錯誤。例如。

  • 失蹤ADD前空間:& "ADD Column [LOB] Text;"
  • 添加[LOB]後兩次
  • 缺少空間FROM:("Select Field5 from" & "[" &
  • 您打開sq2..4但不與他們做任何事
  • db.Execute無參數

定義變量sTable = "[" & objtbl.Name & "]"並使用該參數e會讓你的代碼更好的可讀性。

如果字段3是一個文本字段,你可能需要

" .[Account] = '" & rs!Field3 & "';" 
+0

感謝安德烈。您的最後一個點的伎倆。我會進一步修改你的建議。 –