MS Access库存和自动增量值

时间:2018-08-15 06:26:23

标签: ms-access inventory-management

我对MS Access相当陌生,但我正在尝试建立一个用户友好的数据库来维护血液制品清单。

我需要跟踪一些不同的信息点。

DIN

血型

产品类型

到期日期

我已经想出了一种使用表格将产品添加到表格中的系统,但是现在它并不是非常适合我的需求。

为了提高跟踪能力,我希望能够将新的库存物品分配给不同的机架号和存储单元。我有15个不同的存储单元,实际上我可以填充数百个机架。

所以我遇到的麻烦是简化将我的单元逐步分配到不同机架的过程。我有一个执行此操作的excel电子表格,但对最终用户不友好。

所以我想做的是让我的表格接受产品的条形码扫描,该扫描包含我需要的所有信息,除了机架号和在机架中的位置。我的想法是,我希望能够使用表格放入机架号,然后让表格在我扫描机架时自动增加机架中的插槽。

我已经知道如何从上一个表格中继承默认值,因此在填充机架时,无需重新输入机架号或冷冻机号。

我要使用的格式是1-1、1-2、2-1、2-2,依此类推,直到到达位置8-2。每个机架可容纳16个单元。因此,我希望插槽号自动递增到8-2,然后重置并清除机架号字段。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以为每个读数简单地将数字加1。

broadcast.jl

或者,不使用数字,而是读取最后一个位置:

Dim n As Long
Dim Position As String

n = n + 1
Position = (((n - 1) \ 2) Mod 8) + 1 & "-" & ((n - 1) Mod 2) + 1

编辑:

如果尚未完成,请在表名称中添加一个 AutoNumber 字段,例如 Id

创建如下函数:

n = Val(Split(LastPosition, "-")(0)) * 2 + Val(Split(LastPosition, "-")(1)) - 1
Position = (((n - 1) \ 2) Mod 8) + 1 & "-" & ((n - 1) Mod 2) + 1

然后,在您的表单中,包括一个文本框,使用此表达式作为 ControlSource

来显示机架位置:
Public Function RackPosition(ByVal Number As Long) As String

    Dim Index       As Long
    Dim Position    As String

    ' Avoid zero and negative numbers.
    Index = Abs(Number) + 1

    Position = (((Index - 1) \ 2) Mod 8) + 1 & "-" & ((Index - 1) Mod 2) + 1

    RackPosition = Position

End Function

答案 1 :(得分:0)

这是要做什么:

  1. 表:将 Freezer Rack 的数据类型更改为 Number,Integer

  2. 窗体:将三个文本框(冰箱,机架和位置)调整为大致对齐

  3. 模块:调整为如下所示:

-

Option Compare Database
Option Explicit

Public Function RackPosition(ByVal Number As Long) As String
    Dim Index       As Long
    Dim Position    As String

    ' Avoid zero and negative numbers.
    Index = Abs(Number) + 1

    Position = (((Index - 1) \ 2) Mod 8) + 1 & "-" & ((Index - 1) Mod 2) + 1

    RackPosition = Position

End Function
  1. 表单模块:调整如下:

-

Private Sub SetPosition()

    Const Positions As Integer = 16

    Dim Number      As Integer
    Dim Criteria    As String

    If Nz(Me!Freezer.Value, 0) + Nz(Me!Rack.Value, 0) = 0 Then
        ' No rack data.
    ElseIf IsNull(Me!Position.Value) Then
        ' Calculate next available position.
        Criteria = "[Freezer] = " & Me!Freezer.Value & " And [Rack] = " & Me!Rack.Value & " And [Position] Is Not Null"
        Number = DCount("*", "Blood Inventory (Raw)", Criteria)
        If Number >= Positions Then
            MsgBox "This rack is full", vbInformation + vbOKOnly, "Position"
        Else
            Me!Position.Value = RackPosition(Number)
        End If
    End If

End Sub

Private Sub Freezer_AfterUpdate()

    SetPosition

End Sub

Private Sub Text42_AfterUpdate()

    SetPosition

End Sub

现在,当输入“冷冻库和机架”时,位置将自动填写。