【问题标题】:Get last entry in an access DB table programatically?以编程方式获取访问数据库表中的最后一个条目?
【发布时间】:2019-04-26 17:23:40
【问题描述】:

我正在创建客户记录并希望使用基于年份和我的 Access DB 表中最后一个数据行的编号 +1 的自定义 ID。

示例 ID 是年份和下一个将写入新数据的空行行号。(如果是新数据库表,则为 2019-0001)

我已经研究出如何从日期中提取年份,但我找不到任何信息来获取 Access DB 表中的记录数,任何查找信息/代码的指针都会有所帮助。

我已使用常规 CRUD 方法输入数据,但我希望客户 ID 可以按年份(前 4 位)过滤,以便用于创建忠诚度奖励类型的奖励系统。

【问题讨论】:

  • 您真的需要像那样存储 ID,还是像那样显示 ID?我怀疑一年的INTEGER 列和数字的AUTOINCREMENT 列会更简单。然后在显示它们时根据需要简单地格式化它们。
  • 自动编号字段会自行递增,这是最好的使用方法,您是否有不想使用的原因?除其他外,它将防止 2 个查询同时收集和使用相同的行数的问题。您可以使用计算字段来格式化带有日期的自动编号。
  • 感谢您的快速响应,但我试图避免自动递增,因为我必须进行连接等才能显示。如果我从头开始创建索引,它会使搜索/显示更容易。只有 1 个用户允许访问数据库创建 custID,所以我没有看到重复问题发生。
  • 由于该表将用于多年记录,因此自动增量可以从 2020 年的第一个成员开始,作为一个高数字,这没有意义,我希望它从 1 开始.
  • @MintedDave:在这种情况下,我猜你会通过从表中选择、添加一个并插入到表中来创建一个 ID。只要您可以保证这将永远是一个单用户系统以避免竞争条件,那应该可以工作。您尝试了哪些方法,哪些方法无效?

标签: c# ms-access


【解决方案1】:

我刚刚在我组织的一个数据库中实现了一个类似的 ID。关键是要维护两个单独的列,一个用于年份,一个用于 ID。您也可以将这两列用作主键以保持完整性,但我发现使用单独的自动编号列作为主键更容易。

您可以使用类似于以下的查询来按顺序添加每年的记录。它使用Nz 函数来检查空值(即新年),并将 Id 默认为 0,然后加 1。

INSERT INTO YOUR_TABLE (Year, Id)
SELECT New_Year, New_Id 
FROM (SELECT 2019 as New_Year, Nz(Max(Id),0)+1 as New_Id FROM YOUR_TABLE WHERE Year = 2019);

您需要在 SELECT 查询和表单/报告中使用Format 函数以####-#### 格式显示它,因为原始数据中不会存储前导零,也不是必需的。

下面是一个打印复合 ID 的 SELECT 查询示例

SELECT Format([Year],"0000") & "-" & Format([Id],"0000") AS Composite_Id
FROM YOUR_TABLE;

【讨论】:

  • 谢谢,我打算这样做,但想看看是否可以在没有每年都必须更改的硬编码搜索查询的情况下完成。文本 ID 似乎比使用复合 ID 更易于使用和更新。我正在试验绑定数据,而不是使用 SQL。
【解决方案2】:

复合 ID 在 Access 中有点令人头疼……我多年来使用的解决方案是将我的 ID 作为自动编号/主键并创建一个复合键仅用于显示目的。 一种解决方案是创建一个包含所有年份以及最后一个条目的表
2017 1232
2018 2122
2019 2001
因此,每次您要添加新条目时,您都会读取当前年份...如果匹配,您会读取最后一个值...您将其添加到复合键字段中,例如 2019002001,然后将最后一个条目值增加 1 2019 2002

【讨论】:

    【解决方案3】:

    感谢所有花时间回答我问题的人。

    我正在寻找的是简单的 C# 代码行来查找 Access 数据库表中的最后一个条目。 SQL 查询不是问题,也不是我正在寻找的答案。 (如果不需要,为什么要在 C# 程序中使用存储过程?)

    我决定在数据集中执行此操作,而不是仅在 Access DB 表中查询最后一个条目,这是我想避免的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2016-02-04
      • 2018-04-04
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多