2015-02-06 105 views
1

表格字段我想建立一個表格來更新表格中的字段在表格中根據客戶輸入。該表單有一個標準字段,用於搜索匹配的條目,然後是更新字段以更新另一個表字段。我的問題是,當我引用表單中的字段時,無法使更新工作。下面是代碼:VBA代碼將不會更新從表格輸入

Dim db As Database 
Dim strSQL As String 
Set db = CurrentDb 
Dim uiTAGNAME As String 
Dim uoX_NAM As String 

Forms![Prefill Xmtr Data]!TxtCPointTagname.SetFocus 
uiTAGNAME = Forms![Prefill Xmtr Data]!TxtCPointTagname.Text 

Forms![Prefill Xmtr Data]!TxtQTransmitter.SetFocus 
uoX_NAM = Forms![Prefill Xmtr Data]!TxtQTransmitter.Text 

Debug.Print uiTAGNAME 
Debug.Print uoX_NAM 

'no error, but no update 
db.Execute "UPDATE [IO Data] SET [io data].x_nam = ' uoX_NAM ' " & _ 
    "WHERE [IO Data].tagname Like 'bkr7*';" 

當我設置休息,我可以查看的uoX_NAM的值,它是從形式正確地更新。

我很確定我的表單字段引用不正確,但我嘗試了各種其他方法,其中沒有一個更新表。

如果我嘗試下面的代碼,正確的字段更新,但它不是從表單條目:

'this updates the correct fields 
db.Execute "UPDATE [IO Data] SET [io data].x_nam = 'BRKRCMD'" & _ 
    "WHERE [IO Data].tagname Like 'bkr7*';" 

所以我的問題似乎是我如何引用uoX_NAM變量。

回答

1

每當您執行您在代碼中動態構建的SQL時,請執行此操作:將其存儲在字符串中並在運行之前將其存儲在Debug.Print字符串中。我發現你已經申請了strSQL,但你不用它!

'current code: 
strSQL = "UPDATE [IO Data] SET [io data].x_nam = ' uoX_NAM ' " & _ 
    "WHERE [IO Data].tagname Like 'bkr7*';" 
Debug.Print strSQL 
db.Execute strSQL 

將打印並運行:

UPDATE [IO Data] SET [io data].x_nam = ' uoX_NAM ' WHERE [IO Data].tagname Like 'bkr7*'; 

您當前密碼的更改將字段設置的文字文本uoX_NAM完全像你的第二個代碼塊將字段設置的文字文本BRKRCMD。要插入變量的值,而不是它的名稱,變量名稱必須使用引號外面和&就像這樣連接:

strSQL = "UPDATE [IO Data] SET [io data].x_nam = '" & uoX_NAM & "'" & _ 
    "WHERE [IO Data].tagname Like 'bkr7*';" 
Debug.Print strSQL 
db.Execute strSQL 

將打印並運行:

UPDATE [IO Data] SET [io data].x_nam = 'YOUR VALUE HERE' WHERE [IO Data].tagname Like 'bkr7*'; 

此外,您可以通過引用控件的值而不是Text屬性來更直接地設置變量,而不使用SetFocus。由於價值是默認屬性,你甚至可以省略.Value並指只是該控件的名稱:

所有的
uiTAGNAME = Forms![Prefill Xmtr Data]!TxtCPointTagname 
uoX_NAM = Forms![Prefill Xmtr Data]!TxtQTransmitter 
+0

必須有別的我做錯了。我已經對你的建議嘗試了幾個變化,但桌子仍然沒有更新 - 我對最後一行寄予很高的期望,我沒有嘗試過。 – 2015-02-09 13:49:41

+0

另外,如果我試圖直接按照您的建議設置變量,我仍然會收到錯誤信息。「除非控件具有焦點,否則不能引用控件的屬性或方法。」表單域是未綁定的。我知道我之前就把它排除了,但是代碼是從一個按鈕開始的。 – 2015-02-09 14:01:54

+0

現在您已將SQL打印到調試窗口中,將其複製到剪貼板中。創建一個新的查詢,將其切換到SQL視圖,並將SQL粘貼到窗口中。如果您然後運行更新查詢,您可能會收到更具體的錯誤消息。如果沒有錯誤消息,但也沒有結果,請將SQL更改爲SELECT查詢(不含UPDATE部分),並確認與where條件匹配的行數。沒有選擇由哪裏行意味着目標表中沒有更改,也沒有錯誤消息。 – pteranodon 2015-02-09 19:33:17

0

首先,感謝您的幫助,無齒翼龍的建議使我的答案。我正在處理的數據庫正在對鏈接的數據庫進行更改。無論如何,我還沒有想到與另一張桌子有關係。這是造成重大違規行爲。