背景:我使用Access 2010来管理和跟踪正在研究和支付的税单。它们以Excel格式接收并导入到数据库中,然后我运行了一堆查询来识别研究项目。在任何给定的时间,有数千个不同阶段的账单,但最大的部分总是那些只是准备支付的账单。我已将其自动化,以便标记为"批号" (从我公司的软件系统中选择的一组账单的标识符)从下拉列表中选择,以正确的格式导出我们的付款软件。由于县税局的限制,我一次只能支付1500张账单。
问题/问题:我需要[更好]的方式更新"批号"在一个记录集中,一次记录1500个记录(或更少)。基本上,我希望能够键入一个数字并创建一个组(基于更新"批号"),其中包含许多账单。
示例:如果准备支付的账单总数为3900,那么我会做以下事项:
我尝试过的事情:我疯狂搜索并设法将做工作的东西拼凑起来,但是有大量记录锁定我的计算机......考虑到它的作用,这并不奇怪,但我不得不试一试!它遍历所有记录并将布尔字段标记为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的新手,但是热切地学习我所能做的一切!我感谢任何和所有的帮助。
答案 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}