2017-06-22 66 views
1

我有這樣訪問更新查詢使用VBA

SNo Block SAP SAG BAP BAG DEP DEG 
1 600403 1 3 5 4  
2 600405 1 3 1 3 1 1 
3 600407 3 1   2 4 
4 600409     3 1 
5 600410 1 3 2 5 1 3 
6 600413 1 4   1 3 

一個表I要NULL SAP的細胞和SAG其中SAP = 1和SAG = 3,和BAP的空細胞,BAG其中BAP = 1包= 3和明智的DEP和DEG一樣,我期待得到像下面這樣

SNo Block SAP SAG BAP BAG DEP DEG 
1 600403   5 4  
2 600405     1 1 
3 600407 3 1   2 4 
4 600409     3 1 
5 600410   2 5  
6 600413 1 4    

一些如何google搜索後,我寫了這個代碼,該代碼成功運行沒有任何錯誤,但只SAP列變爲NULL並且SAG列未被清空(SAG docmd的第二個查詢不起作用)!

以下是我的VBA,對不起,我是Access VBA的新手!

Private Sub VbaModule() 

Dim db As DAO.Database 
Dim rs As Recordset 
Dim sSQL As String 
Dim sSQL1 As String 

Set db = CurrentDb() 
Set rs = db.OpenRecordset("T05_Pr2_Null_Not_In_Rem") 

sSQL = "UPDATE T05_Pr2_Null_Not_In_Rem SET SAP = NULL " & _ 
    " WHERE (SAP = 1 AND SAG = 3)" 
    DoCmd.RunSQL sSQL 

sSQL = "UPDATE T05_Pr2_Null_Not_In_Rem SET SAG = NULL " & _ 
    " WHERE (SAP = 1 AND SAG = 3)" 
    DoCmd.RunSQL sSQL 

rs.Close 
Set rs = Nothing 
db.Close 

End Sub 

有沒有建議?

+1

建議不要改變原始數據。只需在查詢中進行計算。 – June7

+2

第二個查詢不能按預期方式工作,因爲您已更改SAP字段中的數據並使用第一個UPDATE – June7

+0

哦!這是正確的......它是一種恥辱......是否有可能通過其他方式達到預期效果?任何想法? – Macs

回答

1
Dim strSQL As String 

    strSQL = "UPDATE T05_Pr2_Null_Not_In_Rem " & _ 
      "SET " & _ 
      " SAP = NULL, " & 
      " SAG = NULL " & _ 
      "WHERE SAP = 1 AND SAG = 3;" 
    CurrentDb.Execute strSQL, dbFailOnError 

    strSQL = "UPDATE T05_Pr2_Null_Not_In_Rem " & _ 
      "SET " & _ 
      " BAP = NULL, " & 
      " BAG = NULL " & _ 
      "WHERE BAP = 1 AND BAG = 3;" 
    CurrentDb.Execute strSQL, dbFailOnError 

    strSQL = "UPDATE T05_Pr2_Null_Not_In_Rem " & _ 
      "SET " & _ 
      " DEP = NULL, " & 
      " DEG = NULL " & _ 
      "WHERE DEP = 1 AND DEG = 3;" 
    CurrentDb.Execute strSQL, dbFailOnError 
+0

更新每個SQL語句中的兩個字段。 不要打開一個記錄集 - 因爲您正在使用動作查詢,所以這裏沒有做任何事情。 使用CurrentDb.Execute()而不是DoCmd.RunSQL() - 它不會提示用戶記錄將被更新,但會在發生錯誤時回滾。 –

+0

這看起來像一個很好的解決方案,將嘗試這... – Macs

+0

這就是工作!非常感謝 ! – Macs