在一个表单中创建多个记录。每条记录仅更改一个字段

Create Multiple Records in One Form. Only One Field Changes per Record

在我工作的地方,我们收到客户寄来的电子仪表,并尝试解决他们遇到的错误。我们将一次收到 4-8 台仪表,它们都有相同的问题、相同的规格、相同的一切,每台仪表之间唯一不同的是序列号。我希望能够以一种形式输入每个序列号和通用规格以创建多个记录。

这是我为表格准备的照片。我一次只能为一个序列号创建记录,但我想一次完成所有操作,以便更快、更轻松地输入数据。

Meter Entry Form

所以总结一下,多个仪表,所有相同的规格,不同的序列号。我想将其全部输入到一个表单中并创建多个记录。感谢您提供给我的任何帮助或见解。

-克里斯

您可以将子表单绑定到存储您的仪表记录的 table,然后在您的主表单上有一些未绑定的字段,允许您输入将在您的记录批次中重复的信息。您还可以在主窗体上放置另一个未绑定的文本框,以指定您希望包含此重复信息的记录数。

所以在下面的模型中,您需要指定您想要的记录数(红框),例如10 条记录:

然后您将提供将针对这 10 条记录(蓝色框)重复的数据:

然后您将单击一个按钮,该按钮将创建使用给定的重复信息指定数量的记录:

这只是一个案例,为您生成的批次中的每条记录完成唯一序列号。

这是我在“添加”按钮上使用的 VBA:

Private Sub cmdAddRecords_Click()

    batchAdd Me.txtRecords
    Me.tblMeters_sub.Requery

End Sub

...以及它调用的 batchAdd 子例程:

Public Sub batchAdd(records As Integer)

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim i As Integer
    
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tblMeters")

    i = 1

    Do While i <= records
    
        rs.AddNew
        rs!SerialNumber = ""
        rs!MeterFirmware = Me.MeterFirmware
        rs!MeterCatalog = Me.MeterCatalog
        rs!Customer = Me.Customer
        rs!MeterKh = Me.MeterKh
        rs!MeterForm = Me.MeterForm
        rs!MeterType = Me.MeterType
        rs!MeterVoltage = Me.MeterVoltage
        rs.Update
        
        i = i + 1

    Loop
    
    rs.Close
    Set rs = Nothing
    Set db = Nothing

End Sub

Here's a link to the mock-up(如果你想仔细看看)。

更新

为了响应您关于是否可以过滤子表单以使其不只是成为所有仪表的大列表的查询,您可以将另一个字段添加到 tblMeters table 将采用您将记录添加到 table:

的日期和时间

然后您需要向 batchAdd 子项添加另一行,将系统时间和日期放入这个新字段中:

...

Do While i <= records

    rs.AddNew
    rs!SerialNumber = ""
    rs!MeterFirmware = Me.MeterFirmware
    rs!MeterCatalog = Me.MeterCatalog
    rs!Customer = Me.Customer
    rs!MeterKh = Me.MeterKh
    rs!MeterForm = Me.MeterForm
    rs!MeterType = Me.MeterType
    rs!MeterVoltage = Me.MeterVoltage
    rs!DateAdded = Now                  ' <-- HERE!
    rs.Update
    
    i = i + 1

Loop

...

然后您需要更改子窗体的记录源 属性(设计视图 > select 子窗体 > 属性 Sheet > 数据选项卡 > 记录源):

将以下 SQL 放在那里:

SELECT TOP 15 tblMeters.SerialNumber, tblMeters.MeterFirmware, tblMeters.MeterCatalog, 
tblMeters.Customer, tblMeters.MeterType, tblMeters.MeterForm, tblMeters.MeterKh, 
tblMeters.MeterVoltage, tblMeters.DateAdded 
FROM tblMeters 
ORDER BY tblMeters.DateAdded DESC;

... 这将按 date/time 字段(最新的在顶部)对记录进行排序,然后仅显示这些记录的前 15 条。如果您想要不同数量的记录,请将 TOP 15 位更改为您选择的不同数量。

当您点击“添加”时,您的新批次记录应该被添加到列表的顶部并且列表应该保持最多 15 条记录(或者您在 TOP ... 中指定的任何数量)

请注意,当我对此进行测试时,快速单击“添加”按钮几次似乎会导致 sql 不理会 TOP ... 过滤器,但只要有在每次“添加”点击之间间隔一秒或更长时间,它似乎工作正常。

希望对您有所帮助。