我有一个带有PartNumber字段(短文本)的表(tblParts),它存储属于多个系列的部件的6位数部件号。这些系列由部件号的前两位数字表示(00,01,02等)。 (注意:我没有创建此表,此时无法更改它)
我需要在编号中找到空白,以便填写未使用的部件号。如果我的项目开始需要特定系列中的6个连续部件号,我想在该系列的第一个间隙中找到第一个未使用的数字。
这是一小部分数据。
(0, 'a')
(1, 'b')
worker
worker
callback
callback
如果我需要一个号码,查询应该找到020008.如果我需要3个号码,它应该找到0200015,如果我需要10个号码,它应该找到020020。
我的SQL知识非常有限,但我正在努力学习。我意识到如果信息存储得当,这会更容易,但我无法控制它。
答案 0 :(得分:0)
我曾写过一篇关于这个主题的文章:
Find and Generate Missing Values in an Access Table
但这将填补任何差距,直到所有新数字都建立起来。因此,该代码需要使用外部循环进行扩展,以确保始终并列数字。
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