2017-08-02 142 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