2017-08-02 163 views
0

我正在首次使用Access和VBA工作。我有兩個表格(VhTr),我有一個基於Tr表格的表格。從訪問表更新第二張表

Tr表內有一個Vh_Id字段(反之亦然Vh表),我試圖更新。在Edit Tr表單上,我有一個下拉列表,其中包含Vh表中的所有ID,並且我有一些SQL設置可以在此下拉列表更改時運行。我得到了一個對話框,告訴我1行會受到影響,儘管說是的,我從來沒有看到在Vh表中做出的更改。

如何獲得以下代碼,以實際更新Vh表中選定的記錄以使用當前記錄更新它的Tr_Id字段?

Dim command As String 
command = "UPDATE Vh SET Tr_Id = " + Me.Tr_Id + " WHERE PK = " + Str(Me.Vh_Id) 
DoCmd.RunSQL (command) 
+0

「反之亦然」是什麼意思 - 爲什麼Vh表有Tr_Id字段的字段?表格不能有雙向關係。 – June7

回答

0

試試這個:

Dim command As String 
command = "UPDATE Vh SET Tr_Id = " & Me.Tr_Id & " WHERE Vh_Id = " & Me.Vh_Id 
DoCmd.RunSQL (command) 

編輯:看起來像Str()功能是罪魁禍首所以最好不要你的where子句中使用它。根據Str()documentation,'將數字轉換爲字符串時,總是爲數字符號預留前導空格。

+0

我仍然有同樣的問題。 Access告訴我'你將要更新1行',當我點擊yes並打開'Vh'表時,什麼都不更新。 – Michael

0

在嘗試解決這個問題之前,我認爲您首先需要停下來並認真思考一下您的表格關係。在我看來,你試圖通過Vh和Tr之間的交叉引用ID實現的是某種一對一關係。也就是說,Vh中的每個記錄在Tr中只能有一個等值,反之亦然。這是完全可以接受的,但是你用代碼嘗試的東西會導致你直接陷入問題。你想允許,我稱之爲孤兒嗎?也就是說,Vh中的某些記錄是否有可能在Tr中沒有相應的記錄,反之亦然?

爲了說明我的觀點,假設你有五條記錄。 PK 1至5和交叉引用兩者中的ID 1至5。現在假設你在Tr上有你的Edit窗體,並且你想把Tr中第一條記錄的Vh_Id改爲5(Vh中的最後一條記錄)。在Tr中進行了更改後,Tr中有兩條記錄(PK 1和5)指向Vh中的相同記錄(PK 5)。如果您現在更新(如您所建議的)Vh,使PK 5具有Tr_ID 1,那麼您將留下以下問題。 Tr中的兩條記錄指向Vh中的相同記錄(PK 5),但是Vh PK 5僅指向其中的一條記錄(Tr PK 1)。 Vh PK 1仍然指向TR_ID 1,但Tr PK 1指向Vh_ID 5.在Tr中沒有指向Vh PK 1的條目。只需進行一次編輯,您的交叉參考系統就會徹底壞掉。

請想一想你真正想做什麼,回到這裏,我們會盡力爲你解決它。

+0

我正試圖實現1對1的關係。擁有一個孤兒不會是一個殺手,但我希望看到不會發生。例如,如果Vh 5從Tr_Id 2變爲Tr_Id 3,則Tr 2的Vh_Id字段將變爲空並且Tr 3將被更新。 – Michael

+0

在訪問中定義您的表格時,您是否添加了這種關係? –

+0

我有。然而訪問呼叫'一對多'。 – Michael