我应该如何在Microsoft Access的OrderLines表中编号我的行?

时间:2018-04-17 13:45:27

标签: ms-access data-structures

我已经搜索了好几个星期了,我想知道我是不是在叫错树或者我错过了什么。我正在Access中创建一个数据库。

结构如下:

tblOrderDetails
.ORDERID .DEALER .CREATEDATE
 4051 Willow 4/17/18
 4052 Oak 4/17/18

tblOrderLines
.ROWID .ORDERID .PRODUCTSKU .ORDERLINENUMBER
1 4051服务台1 2 4051主席2 3 4052梳妆台1
4 4052主席2

希望一切都有道理。

ROWID和ORDERID是自动生成的访问号码。我使用它们作为主键,因此tblOrderDetails.ORDERID是1:n tblOrderLines.ORDERID。

我的问题是关于订单行号。目前,我正在使用查询在打印标签和装箱单时生成行号,但似乎这不是最佳做法。

是否有某种方法可以使用SQL或某些访问函数来创建一个为每个新订单重新启动的序列号。

1 个答案:

答案 0 :(得分:0)

此代码将为订单ID提供下一个订单行号 我认为您必须将其作为表单控件的默认值,或者可能在 after_update 事件中。 我不确定 - 玩个游戏。

Sub Test()

    MsgBox NewOrderLineNumber(4051)

End Sub

Public Function NewOrderLineNumber(OrderID As Long) As Long

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset

    Set db = CurrentDb
    Set qdf = db.CreateQueryDef("", "PARAMETERS Order_Identifier Long; " & _
                                   "SELECT COUNT(OrderID) AS CurrentCount " & _
                                   "FROM tblOrderLines " & _
                                   "WHERE OrderID = Order_Identifier")
    With qdf
        .Parameters("Order_Identifier") = OrderID
        Set rst = .OpenRecordset
    End With

    With rst
        If Not (.BOF And .EOF) Then
            NewOrderLineNumber = .Fields("CurrentCount") + 1
        End If
    End With

End Function