Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 基于字段选择的访问表单中的序列号_Ms Access_Ms Access 2010 - Fatal编程技术网

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

Ms access 基于字段选择的访问表单中的序列号,ms-access,ms-access-2010,Ms Access,Ms Access 2010,希望有人能在这里提供帮助,我对SQL相当陌生,但却是办公室里最有经验的人,所以这份工作落在了我的肩上 我正在尝试构建一个表单,将客户订单插入到生产计划中。该表单允许用户从机器列表表中选择一台机器,但我需要它做的是找到该特定机器的最后一个作业编号,并在文本框中显示下一个序列号;这就是我被困的地方。目标是当生产用户向数据库添加订单时,通过选择他们的机器,自动填充下一个可用的作业编号。输入的信息将保存到主计划表中 我已经构建了一个查询,它可以提取机器和作业组合的整个列表,因为我的目标是构建一个可以从该

希望有人能在这里提供帮助,我对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