希望有人可以在这里提供帮助,我对SQL很新,但却是办公室里经验最丰富的人,所以这份工作已经落到了我的身上。
我正在尝试构建一个将客户订单插入生产计划的表单。该表单允许用户从机器列表中选择一台机器,但在此之后我需要它才能找到该特定机器的最后一个作业编号并在文本框中显示下一个序列号;那就是我被困的地方。目标是当生产用户向数据库添加订单时,通过选择他们的机器,将自动填充下一个可用的作业编号。输入的信息将保存到主调度表中。
我已经建立了一个查询,可以提取整个机器和作业组合列表,因为我的目标是构建一个可以从该列表中搜索的宏,但到目前为止我还没有获得任何牵引力。任何帮助/建议将不胜感激!
答案 0 :(得分:1)
欢迎来到SO。
我的建议是创建一个表来保存序列号。为了这个例子,我们将其称为 ProdSeq ,这意味着生产序列。作为此表定义的一部分,我将使用数据宏(Access 2010及更高版本)以便在添加记录时分配序列。我会使用Unique索引以确保不会创建重复项。
表:ProdSeq (字段定义)
MachineID
(Number - Long) - 在机器表中引用机器ID ProdSeq
(数字 - 长) - 每台机器增加OrderID
(Number - Long) - 在订单表中引用订单ID <强>索引强>
在设计ProdSeq
表时,在设计功能区选项卡下,单击索引按钮。
UniqueKey
,字段名称= MachineID
ProdSequence
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检查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
数据类型。
您也可以在任何查询中将此函数用作计算字段。