2016-12-16 63 views
-1

希望有人能够在这里提供帮助,我对SQL相当陌生,但却是办公室中最有经验的人,所以这项工作已经落到了我的面前。基于字段选择的访问形式中的序列号

我试图建立一个表单,将客户订单插入生产调度。该表格允许用户从机器列表中选择一台机器,但是之后我需要做的是查找该机器的最后一个工作号,并在文本框中显示下一个连续编号;这就是我卡住的地方。目标是当生产用户向数据库添加订单时,通过选择他们的机器,下一个可用的作业编号会自动填充。输入的信息将被保存到主计划表中。

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

+1

欢迎来到SO,但我可以告诉你没有阅读本网站上的“我如何提问”部分,然后再进行第一篇文章。你甚至不用花费2分钟的现场参观。请尽可能多地分享您的相关代码片段。建议在再次发布之前查看http://stackoverflow.com/help/how-to-ask。 –

+0

这是可能的,但我们可以帮助你吗?我们不知道你的表格结构,数据类型等。你可以把你的表格和表格数据的截图(样本数据)。 – harun24hr

回答

0

据我所知,在向表中添加新记录时,您需要为作业编号添加建议值。如果是这样,你可以使用,例如DMax函数。下面是例子的这个VBA代码,它可以被称为当你添加新的记录:

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

我假设JobField,其中包含工作数量已Number数据类型。 您也可以将任何查询中的此函数用作计算字段。

1

欢迎来到SO。

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

表:ProdSeq(字段定义)

  • MachineID(数字 - 长) - 在机器表引用机ID
  • ProdSeq(数字 - 长) - 开始递增的每台机器
  • OrderID (数量 - 长) - 参考订单中的订单ID表

个指数
设计功能区选项卡设计ProdSeq表时,单击指标按钮。

  1. 创建索引称为唯一键
    • 行1:指标名称= UniqueKey,字段名称= MachineID
    • 行2:指标名称= 留空,字段名= ProdSequence
  2. 单击第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 

要特别注意一个事实,即只有一个SetLocalVar是LookUpRecord子句中。使用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> [Schedule] .OrderID - 如果它们确实不同,则从调度中删除Production槽表和Prod序列表。

相关问题