2012-11-16 46 views
0

我现在有一个显示选择查询子窗体。我想用窗体中的信息更新子窗体中显示的表B的所有记录。子表单不是必需的。我只是用它来确保我的选择查询正确显示。Access 2003中 - 运行基于选择查询更新查询结果

表A有3列(OID,PROJECT_NUMBER,地主)
表B具有4列(OID,PHONENUM,地址,年)

这些表具有一对多的关系。表A中的一个OID涉及许多在表B

Table A 
1   A10   Bill 
2   B10   Sally 
3   A10   Bill 

Table B 
1   555   123 blah st   2012 
1            2013 
2   111   456 aaa st   2012 
3            2012 

形式允许用户输入用于填充表B. 子窗体显示的其中PROJECT_NUMBER,地主,和年份都等于记录的列表信息记录显示形式

For example. If the form is showing 
1   A10   Bill 

the subform is showing 
1   A10   Bill  2012 
3   A10   Bill  2012 

,当我点击保存命令按钮我想它运行更新查询,但我在使用的SQL命令的问题。

我的选择查询如下:

SELECT B.Project_Number, A.LANDOWNER, B.Year 
FROM A INNER JOIN B ON A.OBJECTID = A.OBJECTID; 

子窗体设置
链接子字段:PROJECT_NUMBER;年;土地所有者
链接主字段:B.Project_Number;年; A.Landowner

我想:

UPDATE B.PhoneNum, B.Address, B.Year 
WHERE items found in my subform 
WITH information from my form 

是很容易忘记的子窗体和做这一切通过一个单一的更新查询?

UPDATE B SET B.phonenum = [New_Info]![PhoneNumCtrl], B.Address = [New_Info]![AddressCtrl] 
WHERE [A]![Landowner] = The same landowner as the OID selected, [A]![Project_Number] = The same project number as the OID selected, [New_Info]![Year] = [B]![Year] 

在此先感谢您的帮助!现在

一切工作。我想补充djphatic的答案。
这样做时一定要添加[Forms]![formname]![controlname]

回答

1

根据控件在窗体上的位置,您可能需要更改控件引用。

使用查询生成器GUI创建具有要更新和筛选使用窗体上的控件的记录列的选择查询。一旦你有了这个,你可以将查询更改为更新查询并将值设置为表单上的控件。

UPDATE B 
SET B.phonenum = [formname]![controlname], ... 
FROM B JOIN A ON B.OID = A.OID 
WHERE A.PROJECTID = [formname]![controlname] 
AND B.YEAR = [formname]![controlname] 
+0

这是一个很好的开始。我完全不知道如何输入我的WHERE条件。 – mkmitchell

+0

是所有的儿童记录正在更新或只是某些?你如何确定哪一个会被更新?你会在你的WHERE子句中使用这个基础。 – mheptinstall

+0

在这个例子中,我试图只更新电话号码和地址。在我的实际数据库中,我有大约20个需要更新的列,还有2个需要保持不变。无论如何引用子表单并使更新查询更容易,或者我应该删除子表单并通过一个单一命令执行整个选择和更新? – mkmitchell