欢迎来到SO。
我的建议是创建一个表来保存序列号。为了这个例子,我们称之为ProdSeq,这意味着生产序列。作为此表定义的一部分,我将使用数据宏(Access 2010及更高版本)为了在添加记录时分配序列。我会使用唯一索引以确保不会创建重复项。
表:ProdSeq(字段定义)
MachineID
(数字 - 长) - 在机器表引用机ID
ProdSeq
(数字 - 长) - 开始递增的每台机器
OrderID
(数量 - 长) - 参考订单中的订单ID表
个指数
下设计功能区选项卡设计ProdSeq
表时,单击指标按钮。
- 创建索引称为唯一键
- 行1:指标名称=
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
要特别注意一个事实,即只有一个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序列表。
来源
2016-12-17 18:46:22
DHW
欢迎来到SO,但我可以告诉你没有阅读本网站上的“我如何提问”部分,然后再进行第一篇文章。你甚至不用花费2分钟的现场参观。请尽可能多地分享您的相关代码片段。建议在再次发布之前查看http://stackoverflow.com/help/how-to-ask。 –
这是可能的,但我们可以帮助你吗?我们不知道你的表格结构,数据类型等。你可以把你的表格和表格数据的截图(样本数据)。 – harun24hr