使用单选按钮和复选框将多条记录添加到表中,Access 2003

Posted

技术标签:

【中文标题】使用单选按钮和复选框将多条记录添加到表中,Access 2003【英文标题】:Adding multiple records to a table using radio buttons and check boxes, Access 2003 【发布时间】:2011-11-09 19:48:18 【问题描述】:

我正在建立一个数据库来跟踪现场人员的待命时间表。通常,员工需要整整一周待命,但是,他们有时只需要特定的日子。我在 Access 2003 中有一个表格,其中有一个选项组来指示整周与部分周。如果表单用户选择“部分周”,它会启用一组复选框,让用户指定特定日期(周一、周二、周三等)。我想做的是:

如果用户选择“整周”,表单将创建 7 条记录,每天(周一 - 周日)一个,其中所有字段都相同,保存为“星期几”字段。但是,如果他们选择“部分周”,它应该只创建与用户选择的复选框一样多的记录(因此,如果他们选择星期一和星期二,表单会创建两条记录:一条“星期几”等于星期一和一个“星期几”等于星期二)。

这可能以任何方式/形状/形式吗?

【问题讨论】:

【参考方案1】:

使用DoCmd.RunSQL "insert into ..." 的次数取决于单选按钮和选中的复选框。

【讨论】:

db.Execute 通常优于 DoCmd.RunSQL【参考方案2】:
Dim db As Database
Set db = CurrentDb()

If FullWeek Or Monday Then
    db.Execute "insert into ... " // record for Monday
End If

If FullWeek Or Tuesday Then
    db.Execute "insert into ... " // record for Tuesday
End If

// etc...

db.Close

不要使用DoCmd.RunSQL。这通常是一个坏主意,因为它的行为取决于用户设置。如果你使用 Database Execute 方法,你就不会遇到这个问题。

【讨论】:

【参考方案3】:

通过将工作日定义为数据库中的表格,并使用带有复选框或其他东西的 Listview,可能有更好的方法来完成您想要做的事情。但是,鉴于您当前的模型,这将完成您正在寻找的内容:

编辑代码:

Option Compare Database
Option Explicit

'Declare a Collection to hold references
'to your checkboxes at the form level:
Private DayCheckBoxes As Collection

'Use the Form_Load Event to set up:
Private Sub Form_Load()

    'Initialize the Form Variable:
    Set DayCheckBoxes = New Collection

    'Add each checkbox to the collection:
    With DayCheckBoxes
        .Add Me.chkSun
        .Add Me.chkMon
        .Add Me.chkTue
        .Add Me.chkWed
        .Add Me.chkThu
        .Add Me.chkFri
        .Add Me.chkSat
    End With

    'A local variable to walk the collection:
    Dim CurrentCheckBox As CheckBox

    'Walk through the controls, and set the .Tag property to
    'hold the name for each weekday. Note that in this case,
    'the weekday name is extracted from each control name:
    For Each CurrentCheckBox In DayCheckBoxes
        CurrentCheckBox.Tag = Replace(CurrentCheckBox.Name, "chk", "")
    Next

End Sub


Private Sub cmdOK_Click()
        Call UpdateSchedule
End Sub


Private Sub UpdateSchedule()
    Dim db As Database
    Set db = CurrentDb()

    'Local variable used to walk the collection:
    Dim CurrentCheckBox As CheckBox

    'Walk through the collection:
    For Each CurrentCheckBox In DayCheckBoxes

        'If the checkbox is checked, execute your INSERT
        '(Assumes your optionGroup values are 1 and 2 for full and partial, respectively):
        If Me.frmFullOrPartial = 1 Or (Me.frmFullOrPartial = 2 And CurrentCheckBox) Then

            'I used a really simple INSERT to test everythiing. Put your own SQL in here:
            db.Execute "INSERT INTO ScheduledDays (DayOfWeek) VALUES ( '" & CurrentCheckBox.Tag & "' )"
        End If
    Next

End Sub

【讨论】:

哦,忘了整整一周的部分。如果选择了 fullWeek,则遍历集合并将所有复选框设置为 True。然后调用 UpdateSchedule。 好的。我进行了快速编辑以考虑您的基本要求。虽然这看起来比这里的其他一些帖子更多的代码,但您会发现在 Load Even 中创建复选框集合并在整个过程中使用它将使维护更容易。您可能需要稍微调整代码以适应您的设计。我不知道你是如何管理你的选项组的,所以我“插上”了它。

以上是关于使用单选按钮和复选框将多条记录添加到表中,Access 2003的主要内容,如果未能解决你的问题,请参考以下文章

使用 Knockout.JS 通过 JSON 将 HTML 复选标记传递到表中

单选按钮/复选框/选择选项 - 添加所选项目的价格(价值)总计,并将它们添加到数组中

向表中插入多行 - Access

输入在标签内时的CSS复选框和单选按钮?

使用 NodeJS 在 mySQL 中插入多条记录以防止注入并获取每条记录的 ID

使用从数据库传递的id将文件上载链接到表中的按钮