我有一个带有零件编号字段(短文本(的表格(tblParts(,该字段存储属于多个系列的零件的6位零件号。系列由部件号的前 2 位数字(00、01、02 等(表示。 (注意:我没有创建此表,目前无法更改它(
我需要找到编号中的空白,以便填写未使用的部件号。如果我有一个项目开始,需要特定系列中的 6 个连续零件号,我想在该系列中该尺寸或更大尺寸的第一个间隙中找到第一个未使用的编号。
下面是数据的一小部分。
PartNumber
020001
020002
020003
020004
020005
020006
020007
020009
020010
020011
020012
020013
020014
020019
020101
如果我需要一个数字,查询应该找到020008。如果我需要 3 个数字,它应该找到 0200015,如果我需要 10 个数字,它应该找到 020020。
我的SQL知识非常有限,但我正在努力学习。我意识到如果信息存储正确,这会容易得多,但我无法控制它。
我曾经写过一篇关于这个主题的文章:
在访问表中查找并生成缺失值
但在确定所有新数字之前,这将填补任何空白。因此,该代码需要使用外部循环进行扩展,以确保始终并列数字。
Private Sub btnSearch_Click()
' Read table/query sequentially to
' record all missing IDs.
' Fill a ListBox with missing values.
' A reference to Microsoft DAO must be
' present.
' Define search table or query.
Const cstrTable As String = "Orders"
Const cstrField As String = "OrderID"
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim lst As ListBox
Dim col As Collection
Dim strSQL As String
Dim strList As String
Dim lngLast As Long
Dim lngNext As Long
Dim lngMiss As Long
strSQL = "Select " & cstrField & "" _
& " From " & cstrTable & _
& " Order By 1;"
Set lst = Me!lstMissing
Set col = New Collection
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(strSQL)
If rst.RecordCount = 0 Then
'The recordset is empty.
'Nothing to do.
Else
lngLast = rst(cstrField).Value
rst.MoveNext
While rst.EOF = False
lngNext = rst(cstrField).Value
For lngMiss = lngLast + 1 To _
lngNext - 1
col.Add (lngMiss)
Next
lngLast = lngNext
rst.MoveNext
Wend
'Generate next value in sequence.
'Discard if collecting only
'missing values.
col.Add (lngLast + 1)
End If
rst.Close
'Populate list box from collection.
For lngMiss = 1 To col.Count
If Len(strList) > 0 Then
strList = strList & ";"
End If
strList = strList & col(lngMiss)
Debug.Print col(lngMiss)
Next
lst.RowSource = strList
Debug.Print strList
Set rst = Nothing
Set dbs = Nothing
Set col = Nothing
Set lst = Nothing
End Sub