Ms access 基于字段选择的访问表单中的序列号
希望有人能在这里提供帮助,我对SQL相当陌生,但却是办公室里最有经验的人,所以这份工作落在了我的肩上 我正在尝试构建一个表单,将客户订单插入到生产计划中。该表单允许用户从机器列表表中选择一台机器,但我需要它做的是找到该特定机器的最后一个作业编号,并在文本框中显示下一个序列号;这就是我被困的地方。目标是当生产用户向数据库添加订单时,通过选择他们的机器,自动填充下一个可用的作业编号。输入的信息将保存到主计划表中Ms access 基于字段选择的访问表单中的序列号,ms-access,ms-access-2010,Ms Access,Ms Access 2010,希望有人能在这里提供帮助,我对SQL相当陌生,但却是办公室里最有经验的人,所以这份工作落在了我的肩上 我正在尝试构建一个表单,将客户订单插入到生产计划中。该表单允许用户从机器列表表中选择一台机器,但我需要它做的是找到该特定机器的最后一个作业编号,并在文本框中显示下一个序列号;这就是我被困的地方。目标是当生产用户向数据库添加订单时,通过选择他们的机器,自动填充下一个可用的作业编号。输入的信息将保存到主计划表中 我已经构建了一个查询,它可以提取机器和作业组合的整个列表,因为我的目标是构建一个可以从该
我已经构建了一个查询,它可以提取机器和作业组合的整个列表,因为我的目标是构建一个可以从该列表中搜索的宏,但到目前为止,我还没有获得任何动力。如有任何帮助/建议,将不胜感激 据我所知,在向表中添加新记录时,需要为job number添加建议值。如果是这样,您可以使用,例如DMax函数。以下是用于此目的的VBA代码示例,在添加新记录时可以调用该代码:
Me.MyTextBox = DMax("JobField", "JobsTable") + 1
我假设包含作业编号的JobField具有数字数据类型。
您还可以在任何查询中使用此函数作为计算字段。欢迎使用SO
我的建议是创建一个表来保存序列号。在本例中,我们将其称为ProdSeq,这意味着生产序列。作为此表定义的一部分,我将使用Data Macros Access 2010及更高版本,以便在添加记录时分配序列。我会使用一个唯一的索引,以确保没有重复创建
表:ProdSeq字段定义
MachineID编号-长-引用机器表中的机器ID
ProdSeq编号-长-每台机器递增
OrderID编号-长-引用Orders表中的订单ID
索引
设计ProdSeq表时,在“设计”功能区选项卡下,单击“索引”按钮
创建一个名为UniqueKey的索引
第1行:索引名=唯一键,字段名=MachineID
第2行:索引名=留空,字段名=ProdSequence
单击第1行第1列并设置以下索引属性:
主要=是
唯一=是
忽略空值=否
数据宏
在设计ProdSeq表时,在“设计”功能区选项卡下,单击“创建数据宏”按钮,然后单击“更改前”按钮。输入以下数据宏:
创建“更改前数据”宏,并按如下方式进行设置:
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上的折叠/展开-/+按钮确保
创建After Insert data宏,并按如下方式进行设置:
试一试
你可以在一个空白数据库中创建它,以便了解我在说什么。你应该能够适应你的具体情况
形式
在表单上,当用户选择机器和订单时,可以使用VBA检查ProdSeq中的现有记录,并获取ID。如果不存在记录,则可以创建一条,然后将ProdSeq ID返回表单
注意:根据您的设计,您可能还需要在明细表上创建数据宏。假设有人用特定的机器和订单创建了一个时间表,并预留了一个生产时段。现在假设他们更改了订单ID。。我们错误地保留了一个生产插槽。因此,如果这适用,您还需要在调度表上使用AfterUpdate data宏,检查[old].OrderID[Schedule].OrderID-是否存在差异,以从调度表和生产序列表中删除生产槽。欢迎使用So,但是我可以告诉你,在发表你的第一篇文章之前,你没有读过这个网站上的“如何提问”部分。你甚至连两分钟的现场参观都没有。请尽可能多地分享您的相关代码片段以获得解决方案。建议在再次发布之前查看。这是可能的,但我们如何帮助您?我们不知道你的表格结构,数据类型等。你能把你的表格截图和表格数据样本数据。
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