基于字段选择的Access Form中的序列号序列号、字段、Access、Form

2023-09-03 08:36:27 作者:爱梦人 !

希望有人能在这里帮忙,我对SQL还不熟悉,但我是办公室里最有经验的人,所以这份工作落在了我身上。

我正在尝试构建一个将客户订单插入到生产计划中的表单。该表单允许用户从机器列表中选择一台机器,然而,在此之后,我需要它做的是找到该特定机器的最后一个作业编号,并在文本框中显示下一个序列号;这就是我遇到的问题。目标是当生产用户向数据库添加订单时,通过选择他们的机器,自动填充下一个可用的作业编号。输入的信息将保存到主计划表中。

Access 中表计算字段的设计

我构建了一个查询来获取整个机器和作业组合列表,因为我的目标是构建一个可以从该列表中进行搜索的宏,但到目前为止,我还没有获得任何支持。如有任何帮助/建议,我们将不胜感激!

推荐答案

欢迎使用SO。

我的建议是创建一个表来保存序列号。出于本例的目的,我们将其命名为ProdSeq,意思是生产序列。作为该表定义的一部分,我将使用数据宏(Access 2010及更高版本)来分配添加记录时的序列。我将使用唯一索引以确保不会创建重复项。

表:PROSEQ(字段定义)

MachineID(数字长)-引用计算机表中的计算机ID ProdSeq(长数字)-为每台计算机递增 OrderID(数字长)-引用订单表中的订单ID

指数 在设计ProdSeq表时,在设计功能区选项卡下,单击索引按钮。

创建名为UniqueKey的索引 第一行:索引名=UniqueKey,字段名=MachineID 第2行:索引名=留空,字段名=ProdSequence 单击第1行第1列,然后设置以下索引属性: Primary = Yes Unique = Yes Ignore Nulls = No

数据宏 在设计ProdSeq表时,在设计功能区选项卡下,单击创建数据宏按钮,然后单击更改前按钮。输入以下数据宏:(Pastebin link)

创建更改前数据宏,并按如下方式设置:

If [IsInsert] Then
    SetLocalVar
           Name  LatestProdSequence
     Expression  = 0

    Look Up A Record In   ProdSeq
        Where Condition   =[ProdSeqLookup].[MachineID]=[ProdSeq].[MachineID] And
                           [ProdSeqLookup].[LatestSeq] = True
                  Alias   ProdSeqLookup
       SetLocalVar
                 Name  LatestProdSequence
           Expression  =[ProdSeqLookup].[ProdSequence]
    SetField
           Name  ProdSeq.ProdSequence
          Value  = [LatestProdSequence]+1
    SetField
           Name  ProdSeq.LatestSeq
          Value  = True
End If
请特别注意,LookUpRecord子句中只有一个SetLocalVar。使用LookUpRecord上的折叠/展开(-/+)按钮确保。

创建插入后数据宏,并按如下方式设置:(Pastebin Link)

For Each Record In ProdSeq
    Where Condition  = [ProdSeqFlagFix].[MachineID]=[ProdSeq].[MachineID] And 
                       [ProdSeqFlagFix].[LatestSeq]=True And
                       [ProdSeqFlagFix].[ProdSequence]<>[ProdSeq].[ProdSequence]
    EditRecord
        SetField   
               Name  ProdSeqFlagFix.LatestSeq
              Value  = False
    End EditRecord

测试 您可以在空白数据库中创建它,以便查看我正在谈论的内容。您应该能够使其适应您的特定情况。

表单 在您的表单上,当用户选择一台机器和订单时,您可以使用VBA来检查是否有现有的记录,并获取该ID。如果不存在记录,则可以创建一条记录,然后将Food Seq ID返回到该表单。

注意:根据您的设计,您可能还需要在明细表上创建一个数据宏。假设某人创建了一个带有特定机器和订单的计划,并预留了一个生产时段。现在假设他们更改了订单ID。我们错误地预留了一个生产时段。因此,如果这种情况适用,您还需要在调度表上使用AfterUpdate数据宏来检查[old].OrderID<;>[Schedule].OrderID-如果它们确实不同,则从调度表和生产序列表中删除生产槽。