根据指定的小于总数的记录数更新字段(例如,5000条记录中的1000条)

时间:2017-02-06 22:32:01

标签: vba ms-access access-vba ms-access-2010

背景:我使用Access 2010来管理和跟踪正在研究和支付的税单。它们以Excel格式接收并导入到数据库中,然后我运行了一堆查询来识别研究项目。在任何给定的时间,有数千个不同阶段的账单,但最大的部分总是那些只是准备支付的账单。我已将其自动化,以便标记为"批号" (从我公司的软件系统中选择的一组账单的标识符)从下拉列表中选择,以正确的格式导出我们的付款软件。由于县税局的限制,我一次只能支付1500张账单。

问题/问题:我需要[更好]的方式更新"批号"在一个记录集中,一次记录1500个记录(或更少)。基本上,我希望能够键入一个数字并创建一个组(基于更新"批号"),其中包含许多账单。

示例:如果准备支付的账单总数为3900,那么我会做以下事项:

  • BATCH-001 - 1500账单
  • BATCH-002 - 1500账单
  • BATCH-003 - 900账单

我尝试过的事情:我疯狂搜索并设法将工作的东西拼凑起来,但是有大量记录锁定我的计算机......考虑到它的作用,这并不奇怪,但我不得不试一试!它遍历所有记录并将布尔字段标记为True,直到达到计数。然后我使用该布尔字段来过滤更新查询。见下文。

    Private Sub cmdCreateBatch_Click()

        DoCmd.SetWarnings False

        Dim intRecordNum As Integer
        Dim intBatchSize As Integer

        Me.Recordset.MoveFirst

        intBatchSize = Me.txtBatchSize
        intRecordNum = Me.CurrentRecord

        If intRecordNum < intBatchSize Then

            Do Until intRecordNum > intBatchSize
                Me.chkInclude = True
                Me.Recordset.MoveNext
                intRecordNum = Me.CurrentRecord
            Loop
        End If

        DoCmd.OpenQuery "qryUpdateBatchNumber", acViewNormal, acEdit
        DoCmd.OpenQuery "qryUpdateCheckBoxtoFalse", acViewNormal, acEdit

        Me.Requery

        MsgBox "Bill batch has been created."

        DoCmd.SetWarnings True

    End Sub

我仍然是VBA的新手,但是热切地学习我所能做的一切!我感谢任何和所有的帮助。

1 个答案:

答案 0 :(得分:3)

我认为可能采取的方法是运行单个查询来计算需要添加到批处理中的1500条记录,而不是逐步浏览您的记录并单独更新它们直到您完成1500.假设您的bills表有一个数字主键,那么你可以使用像

这样的东西
select max(BillID) As BatchEnd from 
    (select top 1500 BillID from Bills
     where BatchNumber Is Null and Status = {ready to batch}
     order by BillID) As X

请注意,您不必担心最后明确指定一个小批量;如果没有未记录的1500条记录,则top 1500将只提供所有剩余的未分类记录。找到这个最大的未分配BillID后,你甚至不需要设置一个标志(chkInclude),你可以直接进行更新

update Bills 
set BatchNumber = {whatever your next BatchNumber is},
    Status = {new status}
where BatchNumber Is Null and BillID <= {variable where you stored BatchEnd}