【问题标题】:How to Add Serial Number Field in MS Access Form如何在 MS Access 表单中添加序列号字段
【发布时间】:2020-02-22 19:47:53
【问题描述】:

我在 MS Access 2007 中有一个 Invoice 表单。此表单有一个名为 InvoiceLines 的子表单,其中包含 SerialNumberItemNumberItemNameItemQty 等字段。我想在其中添加序列号这种形式。我添加了=CurrentRecord 属性来显示当前行号。但是这个属性在所有行中都显示数字“1”。有没有最简单的方法可以在 MS Access 表单中添加序列号?

【问题讨论】:

  • 序列号是指自动递增 ID?
  • 不,我只想为每一行添加行号(或记录号)。如果我删除一行,那么行号应该会自动更新,就像在 excel 表中一样。
  • 行号仅在数据集已排序时才有意义 - 您是否正在对数据集进行排序?如果是这样,在哪个领域?如果您只是想在表单中显示递增的数字,为什么要在您的问题中如此频繁地提及您的 SerialNumber 字段?
  • 感谢您提供更多信息。 if I delete/sort any row then the sequence of serial numbers should not affect 是什么意思?发票1Wheat Flour 是否应该始终是序列号3?或者它是否依赖于排序?
  • 我的意思是,如果我删除Serial Number 2 的行,那么serial number 3 将代替2 并自动变为2。实际上Serial Number 是用于计算行数

标签: ms-access ms-access-2007


【解决方案1】:

好的,现在知道你想要什么是我的解决方案:

在子窗体中添加这个过程:

Private Function SerialNumber(ByVal sourceForm As Form) As Variant
    On Error GoTo Catch

    SerialNumber = Null

    With sourceForm.RecordsetClone
        .Bookmark = sourceForm.Bookmark
        SerialNumber = .AbsolutePosition + 1
    End With

Done:
    Exit Function

Catch:
    If Err.Number <> 3021 Then MsgBox Err.Number & ":" & Err.Description, vbExclamation, "SerialNumber"
    Resume Done
End Function

然后在这个子窗体中添加一个文本框控件并将其Control Source设置为=SerialNumber([Form])

这将满足您的所有需求。

备注:如果您删除子表单中的记录,则必须刷新子表单以更新序列号。

【讨论】:

  • 我对编码不太熟悉。如何在子窗体中添加此过程?在=SerialNumber([Form]) 中,我必须在[Form] 的位置写子表单名称吗?喜欢=SerialNumber([InvoiceLines])
  • 不,完全是=SerialNumber([Form])。要将代码添加到子表单:在Design View 中打开子表单。然后在名为Design 的功能区页面中按View Code。在现在打开的代码窗口中,将代码粘贴到空闲区域并保存。切换回 Access 表单设计窗口,关闭表单。完成
  • 太棒了..!感谢您的帮助。
【解决方案2】:

您可以通过更改表单的数据源并在其中添加一个新列来解决此问题。

假设您的表名为Table1,主键为ID,您可以使用子查询动态计算:

SELECT Table1.*, (Select Count(*) FROM Table1 as X WHERE X.ID &lt; Table1.ID)+1 AS Serial FROM Table1

【讨论】:

  • 我已在SerialNumber 字段中插入此查询,但显示错误#Name?
  • SerialNumber 字段中?想法是将其用作表单的数据源,而不是控件的数据源。也许你应该先用这个 SQL 创建一个新查询,看看它的输出是什么。
  • 请注意,Table1ID 可能必须重命名以适应您的环境。
  • 我创建了一个新查询Query1 并将其用作我的表单SerialNumber 字段的控制源。喜欢=[Query1]![SerialNumber]。但它显示错误#Name?
  • 当我在表视图中打开此查询时,查询工作正常,但在我的表单中却没有
【解决方案3】:

从您的屏幕截图和描述来看,您似乎在描述一个AutoNumber 字段。

用户无法编辑此类字段,MS Access 将使用数据集中唯一的整数自动填充此类字段。这可以用作数据集的主键,不受记录排序或删除的影响。

如果您当前的SerialNumber 字段已经包含数据,您将无法将此字段的数据类型更改为AutoNumber。因此,您需要先删除现有的 SerialNumber 字段,然后再添加数据类型为 AutoNumber 的新字段。

【讨论】:

  • 在自动编号的情况下,当我生成第二张发票时,自动编号将从 4 开始。但我想在从 1 开始的每张发票中添加序列号。就像显示在页脚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 2013-08-10
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多