基于字段选择的访问表单中的序列号

时间:2016-12-16 21:24:00

标签: ms-access ms-access-2010

希望有人可以在这里提供帮助,我对SQL很新,但却是办公室里经验最丰富的人,所以这份工作已经落到了我的身上。

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

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

2 个答案:

答案 0 :(得分:1)

欢迎来到SO。

我的建议是创建一个表来保存序列号。为了这个例子,我们将其称为 ProdSeq ,这意味着生产序列。作为此表定义的一部分,我将使用数据宏(Access 2010及更高版本)以便在添加记录时分配序列。我会使用Unique索引以确保不会创建重复项。

表:ProdSeq (字段定义)

  • MachineID(Number - Long) - 在机器表中引用机器ID
  • ProdSeq(数字 - 长) - 每台机器增加
  • OrderID(Number - Long) - 在订单表中引用订单ID

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

  1. 创建名为 UniqueKey 的索引
    • 第1行:索引名称= UniqueKey,字段名称= MachineID
    • 第2行:索引名称= 保留空白,字段名称= ProdSequence
  2. 单击第1行第1列并设置以下索引属性:
    • Primary = Yes
    • Unique = Yes
    • Ignore Nulls = No
  3. 数据宏
    在设计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检查ProdSeq中的现有记录,并获取ID。如果不存在记录,则可以创建一个,然后将ProdSeq ID返回到表单。

    注意:根据您的设计,您可能还需要在“计划”表上创建数据宏。假设某人创建了具有特定机器和订单的计划并保留了生产槽。现在假设他们更改了订单ID ..我们有一个错误保留的生产槽。因此,如果这适用,您还需要在调度表上使用AfterUpdate数据宏来检查是否[old] .OrderID&lt;&gt; [Schedule] .OrderID - 如果它们不同,则从日程表和Prod Sequence表中删除Production槽。

答案 1 :(得分:0)

据我了解,当您向表中添加新记录时,需要为作业号添加建议值。如果是这样,您可以使用,例如DMax功能。以下是VBA代码的示例,可以在添加新记录时调用它:

Me.MyTextBox = DMax("JobField", "JobsTable") + 1

我认为包含作业号的JobField具有Number数据类型。 您也可以在任何查询中将此函数用作计算字段。