【问题标题】:Microsoft Access VBA add data from form to tables unbound formMicrosoft Access VBA 将数据从表单添加到未绑定表单的表
【发布时间】:2021-04-16 17:42:39
【问题描述】:

如何使用代码生成的数据和用户输入将记录添加到 deploymentStep 表和 deploymentPlan 表?

我有如下表格

PillarTeamDeploymentSteps

pillarTeam pillarTeamStep other info
team 1 step 1
team 1 step 2
team 1 step 3
team 1 step 4
team 2 step 1
team 2 step 2
team 2 step 3
team 2 step 4
team 2 step 5
team 2 step 6

和表的结构

部署步骤

pillarTeam pillarTeamStep deployment endDate

部署计划

pillarTeam deployment startDate endDate

使用表单我希望用户能够选择他们的团队并让它使用相应的pillarTeamSteps 自动填充文本字段。这可以在屏幕截图中看到。

在用户选择了一个团队并自动填充了步骤后,他们将在日期框中手动输入数据。从这里我想要一个按钮来添加记录。我正在使用以下代码来更新表单可见字段和值。每个团队最多只能走十步。

如何使用代码生成的数据和用户输入将记录添加到 deploymentStep 表和 deploymentPlan 表?

Private Sub pillarTeam_AfterUpdate()
Dim db As DAO.Database
Dim RS As DAO.Recordset
Dim deploymentSteps As DAO.Recordset

Set db = CurrentDb

strSQL = "SELECT PillarTeamDeploymentSteps.pillarTeam, PillarTeamDeploymentSteps.pillarTeamStep, PillarTeamDeploymentSteps.deploymentType FROM PillarTeamDeploymentSteps WHERE (((PillarTeamDeploymentSteps.pillarTeam)=" & Me.pillarTeam & "))"

Debug.Print (strSQL)

Set RS = db.OpenRecordset(strSQL)
If Not (RS.EOF) Then
    RS.MoveLast
    RS.MoveFirst
End If



'setting visible controls
Dim ctl As Control
For Each ctl In Me.Controls
    If ctl.Tag < RS.RecordCount + 1 Or (ctl.Tag < RS.RecordCount + 21 And ctl.Tag >= 20) Then
        ctl.Visible = True
    Else
        ctl.Visible = False
    End If
Next ctl


With RS
    If Not .BOF And Not .EOF Then
    .MoveLast
    .MoveFirst
    While (Not .EOF)
        Debug.Print (RS.AbsolutePosition)
'populating deployment steps
        For Each ctl In Me.Controls
            If ctl.Tag = RS.AbsolutePosition Then
                ctl.Value = RS.Fields("pillarTeamStep")
            End If
            
         Next ctl
          
        .MoveNext
    Wend
        
        
    End If
    .Close
End With
    

    Set RS = Nothing
    Set db = Nothing

【问题讨论】:

    标签: vba ms-access recordset


    【解决方案1】:

    建议将表单绑定到 deploymentPlan,并将子表单绑定到 deploymentStep。

    要“批量”创建记录,请使用 INSERT SELECT 操作 SQL。

    CurrentDb.Execute "INSERT INTO deploymentStep(pillarTeam, pillarTeamStep, deployment) " & _
                       "SELECT " & Me.tbxTeam & " AS T, pillarTeamStep, " & Me.tbxDeploymentID & " AS D " & _
                       "FROM PillarTeamDeploymentSteps " & _
                       "WHERE pillarTeam=" & Me.tbxTeam
    

    这假定pillarTeam 和部署是数字标识符,例如自动编号类型。如果不是,则使用撇号分隔符。

    这里的技巧是首先保存“父”部署计划记录并获取该记录标识符以在部署步骤中另存为外键。

    【讨论】:

    • 所以在这种情况下,我会将deploymentStep 表绑定到表单控件并使其成为连续表单? @june7
    • 谢谢@June7 我认为这可能是最好的前进路线,我已将答案标记为正确。我很欣赏精致的表单设置。
    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 2017-11-24
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多