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

标签 ms-access vba ms-access-2010 ms-access-2007 ms-access-2013

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

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

Meter Entry Form

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

-克里斯

最佳答案

您可以将子表单绑定(bind)到存储仪表记录的表,然后在主表单上添加一些未绑定(bind)的字段,以允许您输入将在批处理记录中重复的信息。您还可以在主窗体上放置另一个未绑定(bind)的文本框,以指定您想要包含此重复信息的记录数。

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

enter image description here

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

enter image description here

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

enter image description here

这将只是一个案例,为您生成的批处理中的每条记录填写唯一的序列号。

这是我在“添加”按钮上使用的 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 表添加另一个字段来获取日期以及您向表中添加记录的时间:

enter image description here

然后,您需要向 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

...

然后,您需要更改子窗体的记录源属性(设计 View > 选择子窗体 > 属性表 > 数据选项卡 > 记录源):

enter image description here

将以下 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;

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

当您单击“添加”时,您的新批处理记录应添加到列表顶部,并且列表最多应保留 15 条记录(或您在 TOP ...< 中指定的任何数量)/)

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

希望这有帮助。

关于ms-access - 在一种表单中创建多个记录。每条记录仅更改一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33245849/

相关文章:

sql - 计算SQL中的多个字段

visual-studio - Microsoft.ACE.OLEDB.12.0 提供程序未注册

ms-access - 如何在表单控件中显示查询记录数

vba - ACCESS VBA - 获取无线网络名称(已连接)

vba - 如果使用默认加密(高安全性)进行密码保护,是否无法使用 Excel Access Access 2010 数据库?

sql - 为 MS Access 编写 SQL 查询

excel - 使用 Replace 仅替换字符串的一小部分

performance - 提高 FOR 循环的性能

ms-access - 在 Access 2010 中重命名子表单

zooming - Access 2010 Web 浏览器控制缩放图像