我想根据查询更新两个包含一个子表单的表

时间:2014-02-21 22:38:17

标签: ms-access

我正在检修使用社会安全号码构建的旧访问数据库作为PK,这是不再允许的。所以,我在正确地关联这些表方面做了大量工作。所以,它远远地显示信息但不允许添加。具体做法是:

在一个家庭中可以居住许多客户。客户可以住在一个家庭中。这意味着多对多的关系,所以我创建了一个名为Residency的联合表。

客户信息1

Client ID PK
Lastname
Firstnam
Address

家用

HouseholdID PK
DateAdded

居留

ResidencyID PK
HouseholdID FK
ClientID FK
Active

enter image description here

我的表单,基于查询:

SELECT [Clients information1].ClientID, [Clients information1].LASTNAME, [Clients information1].FIRSTNAM, [Clients information1].SSN, [Clients information1].MI, [Clients information1].ADDRESS, [Clients information1].CITY, [Clients information1].STATE, [Clients information1].ZIP, [Clients information1].PHONE, [Clients information1].BIRTHDTE, [Clients information1].MARSTAT, [Clients information1].RACE, [Clients information1].SEX, [Clients information1].INCOME, [Clients information1].NOINHOUS, [Clients information1].PRINCOME, [Clients information1].SEINCOME, [Clients information1].AGENCYID, [Clients information1].WARNMESS, [Clients information1].ALTS, [Clients information1].COUNTY, [Clients information1].Email, Distribution.Case, Residency.HouseholdID, Role.RoleID
FROM Role INNER JOIN (Household INNER JOIN ((([Clients information1] LEFT JOIN Distribution ON [Clients information1].ClientID = Distribution.ClientID) INNER JOIN Residency ON [Clients information1].ClientID = Residency.ClientID) ON Household.HouseholdID = Residency.HouseholdID) ON Role.RoleID = Residency.RoleID;

在HouseholdID上链接Parent to Child的子表单基于以下查询。我缩短了列表的可读性(这可能是问题,它基于查询的事实。但就像我说的那样显示当前记录很好!)

SELECT [Clients information1].ClientID, [Clients information1].LASTNAME, ...
 Residency.HouseholdID, Residency.ClientID
FROM Household INNER JOIN ([Clients information1] INNER JOIN Residency ON [Clients information1].ClientID = Residency.ClientID) ON Household.HouseholdID = Residency.HouseholdID
ORDER BY [Clients information1].BIRTHDTE;

当我使用此表单向家庭添加新人时,它会成功添加到Client表,但不会添加到Residency表。当我刷新表单时,该人不会列出,但它们存在。

我需要在Client表和Residency表中添加一条记录,其中包含一个子表单条目。这不可能吗?建立了关系(如果我有足够的声誉,我会添加一个图像)。

1 个答案:

答案 0 :(得分:0)

让我试着帮忙。但首先:

  1. 您的查询是指没有下划线的“客户信息”表格,如您帖子顶部的表格名称所示。
  2. 我相信你的Residency表,你复制了'HouseholdID',你真的打算'ClientID'(或'Client ID',因为我也看到了)。
  3. 我假设(但需要知道)您的数据输入表格可能有三个列表框(客户,住户,居住地),以及添加客户或住户或居住地的方式。
  4. 根据您选择/添加的方式以及表单是否绑定到记录集,您需要添加VBA代码以在需要时添加Residency记录。
  5. 要执行此操作(IMO),您需要选择一个客户端,选择一个家庭,然后单击一个按钮添加居住地。假设您已经使用了列表框,那么ID可以显示在列表框中或隐藏 - 没有区别。 VBA代码如下:

    Private Sub cmdAddResidency_Click()
    Dim strSQL  As String
    DoCmd.SetWarnings False
    strSQL = "INSERT INTO Residency (HouseholdID, ClientID) SELECT " & Me.lstClients.Column(0) & " AS Expr1, " & Me.lstHouseholds.Column(0) & ";"
    CurrentDb.Execute strSQL
    DoCmd.SetWarnings True
    End Sub