如何在VBA中使用查询结果来更新表?

时间:2012-10-25 01:24:42

标签: access-vba

我确信我接近这个错误,因为数据库必须存在设计问题,但我现在愿意尝试任何事情。

在表格上我有一个主子表格,其中包含不同类型的土地下拉和两个按钮(上一页和下一页)。该子表单数据源是一个名为Section22_PMLU

的表

嵌套在此子表单中的是使用PMLU_Code链接到父子表单的另一个子表单。此数据正在更新到表Section22_Data。

当用户单击父子窗体上的下拉菜单并进行选择,然后在子子窗体中选择详细信息(焊盘特征)时,此数据将正确显示在数据表中。即使用户再次点击下拉菜单(没有创建新记录)并添加子记录,也会反映在数据表中。

问题在于PMLU表。如果我初始进行选择并从嵌套子表单添加数据,则此记录将记录/显示在PMLU表中。如果我在下拉字段中单击并单击"添加新记录"或者按Ctrl +然后从下拉列表中选择一个新项目 - 它会在表格中正确记录/显示。但是,如果我在不创建新记录的情况下进行选择,则此项目将复制先前添加的项目。当我尝试返回(上一个按钮)以查看未显示的记录时。但它仍然在数据表中。

为了解决这个问题,我必须直接进入PMLU表并添加与数据表中找到的PMLU代码匹配的缺失PMLU代码。

如果我运行以下查询,我会得到那些丢失的PMLU。如何使用结果填充缺少代码的PMLU表

SELECT Section22_2_Data.PMLU_Code, Section22_2_Data.PMLUType
FROM Section22_2_Data LEFT JOIN Section22_2_PMLU ON Section22_2_Data.[PMLU_Code] = Section22_2_PMLU.[PMLU_Code]
WHERE (((Section22_2_PMLU.PMLU_Code) Is Null))

1 个答案:

答案 0 :(得分:0)

我使用以下代码刷新修复问题的表

Private Sub btnRefresh_Click()

    Dim strSQL As String

    strSQL = "INSERT INTO Section22_2_PMLU ( PMLU_Code )
        SELECT DISTINCT Section22_2_Data.PMLU_Code
        FROM Section22_2_Data LEFT JOIN Section22_2_PMLU ON Section22_2_Data.[PMLU_Code] = Section22_2_PMLU.[PMLU_Code]
        WHERE (((Section22_2_PMLU.PMLU_Code) Is Null));"
    CurrentDb().Execute strSQL, dbFailOnError
    ' Next 3 only to ensure the append is commited to the table '
    ' before requerying '
    DoEvents
    DBEngine.Idle dbRefreshCache
    DoEvents

    Me.Requery

End Sub