根据小于总数的指定记录数更新字段(例如,5000 条记录中的 1000 条)
Updating field based on specified number of records less than total (e.g., 1000 out of 5000 records)
背景: 我正在使用 Access 2010 来管理和跟踪正在研究和支付的税单。它们以 Excel 格式接收并导入数据库,然后我有一堆查询,我 运行 识别研究项目。在任何给定时间,都有数以千计处于不同阶段的账单,但最大的部分始终是那些准备支付的账单。我已将其自动化,以便从下拉列表中选择的标有 "batch number"(我公司软件系统中一组账单的标识符)的记录以我们软件的正确格式导出以供付款。由于县税局的限制,我一次只能交1500张账单。
Question/Issue: 我需要一种[更好的] 方法来一次更新 1500 条记录(或更少)的 "batch number"更大的记录集。基本上,我希望能够输入一个数字并创建一个组(基于更新 "batch number"),其中包含那么多账单。
例子:如果准备支付的账单总数是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 新手,但我会竭尽全力学习!感谢所有帮助。
我认为可能采用的方法是 运行 单个查询来确定需要将哪 1500 条记录添加到批处理中,而不是单步检查记录并单独更新它们直到完成1500。假设您的 bills
table 有一个数字主键,那么您可以使用类似
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
将只为您提供所有剩余的未分批记录。找到这个最大unbatched 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}
背景: 我正在使用 Access 2010 来管理和跟踪正在研究和支付的税单。它们以 Excel 格式接收并导入数据库,然后我有一堆查询,我 运行 识别研究项目。在任何给定时间,都有数以千计处于不同阶段的账单,但最大的部分始终是那些准备支付的账单。我已将其自动化,以便从下拉列表中选择的标有 "batch number"(我公司软件系统中一组账单的标识符)的记录以我们软件的正确格式导出以供付款。由于县税局的限制,我一次只能交1500张账单。
Question/Issue: 我需要一种[更好的] 方法来一次更新 1500 条记录(或更少)的 "batch number"更大的记录集。基本上,我希望能够输入一个数字并创建一个组(基于更新 "batch number"),其中包含那么多账单。
例子:如果准备支付的账单总数是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 新手,但我会竭尽全力学习!感谢所有帮助。
我认为可能采用的方法是 运行 单个查询来确定需要将哪 1500 条记录添加到批处理中,而不是单步检查记录并单独更新它们直到完成1500。假设您的 bills
table 有一个数字主键,那么您可以使用类似
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
将只为您提供所有剩余的未分批记录。找到这个最大unbatched 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}