Ms access 我想根据查询用一个子表单更新两个表

Ms access 我想根据查询用一个子表单更新两个表,ms-access,Ms Access,我正在检修一个旧的访问数据库,它是用社会安全号码作为PKs构建的,不再被允许。因此,我要做的主要工作是正确地关联这些表格。到目前为止,它可以很好地显示信息,但不允许添加内容。具体而言: 在一个家庭中可以居住许多客户。客户可以居住在一个家庭中。这意味着一种多对多关系,所以我创建了一个名为“派驻”的联合表 客户信息1 Client ID PK Lastname Firstnam Address 家庭 HouseholdID PK DateAdded 派驻服务 ResidencyID PK Hou

我正在检修一个旧的访问数据库,它是用社会安全号码作为PKs构建的,不再被允许。因此,我要做的主要工作是正确地关联这些表格。到目前为止,它可以很好地显示信息,但不允许添加内容。具体而言:

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

客户信息1

Client ID PK
Lastname
Firstnam
Address
家庭

HouseholdID PK
DateAdded
派驻服务

ResidencyID PK
HouseholdID FK
ClientID FK
Active

我的表格,基于查询:

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上链接父对象到子对象的子窗体基于以下查询。为了可读性,我缩短了列表(这可能是问题所在,事实上它是基于查询的。但正如我所说的,显示当前记录很好!)

当我使用此表单向住户添加新人员时,它会成功地向客户表添加新人员,但不会向居住表添加新人员。当我刷新表单时,该人员不会列出,尽管他们存在


我需要使用一个子表单条目向客户机表和派驻表添加一条记录。这不可能吗?关系已经建立(如果我有足够的声誉,我会添加一个图像)。

让我试着帮助你。但首先:

  • 您的查询引用的表“Clients information”没有下划线,如文章顶部的表名所示
  • 我相信在你的居留表中,你复制了“HouseholdID”,你真的想拥有“ClientID”(或者我看到的“客户ID”)
  • 我假设(但需要知道)您的数据输入表单可能有三个列表框(客户、家庭、居住),以及添加客户或家庭或居住的方法
  • 根据您选择/添加的方式以及表单是否绑定到记录集,您需要添加VBA代码以在需要时添加派驻记录
  • 要做到这一点(IMO),您需要选择一个客户,选择一个家庭,然后单击一个按钮来添加居住权。假设您使用了listbox,那么ID可以显示在listbox中,也可以隐藏,这没有什么区别。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
    

  • 1.是的,说明中的下划线是错误的。(下意识地想用空格来固定表名!)2。再次更正。我迫不及待地想得到足够的声誉来发布表单的图片。子表单是一个连续表单,列出了与住户ID相关的每个客户信息1条目。该表单设置为允许添加,以便可以在最后一个条目中键入新记录。空白的家庭ID由默认值设置为等于父窗体中选择的户头的值。4。我曾想过以编程方式这样做,这样可以让我在sub中输入两个表,但我认为我应该能够在没有.5的情况下完成。该程序的原始流程是搜索姓名或客户号,主客户窗体将弹出所选个人。该表格有几个与个人相关的标签,其中一个是“家庭清单”。然而,在这个新的居住表中,添加新家庭的流程似乎在逻辑上要求首先创建一个家庭记录,然后添加一个户主,然后再添加房子中的所有受抚养人(表单必须“记住”在多用户环境中刚刚创建的家庭)。
    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