【问题标题】:Cutting off the 0's at the front of a record切断记录前面的 0
【发布时间】:2012-02-27 16:45:15
【问题描述】:

这可能是一个基本问题,但我不知道如何在 Google 中用词。

基本上,我有一个 Access 数据库,其主键采用这种格式(“02”000)构成。

当我尝试粘贴数字时,它会忽略“02”并直接转到 000。

例如,这里是代码;

PeriodRoomID.Name = ("R" & ds.Tables("sqlSpecRoomRequest").Rows(i).Item(1))

PeriodRoomID.Name 应该是 R02001。 PeriodRoomID.Name 与 R1 一样出现。

它忽略“02”并忽略 0。这在数学上是有道理的,但这不是我想要的。我需要一种方法来获得准确的输出,而不是一些简化的版本。

查询;

SELECT SpecialSoftware.SpecSoftID, SpecialSoftware.RoomID, SpecialSoftwareNames.Description, Rooms.Capacity
FROM SpecialSoftware, SpecialSoftwareNames, Rooms

【问题讨论】:

  • 列的类型是什么,您的查询是什么样的?
  • 你的意思是数据类型?它是一个数字。我将在上面发布查询。
  • 如果是数字,怎么会有引号?我觉得这很奇怪。
  • Access 格式的工作方式是这样的。 “02”表示记录必须以数字 02 开头。之后的 000 表示必须存在 3 个 INTEGERS。如果不是,那么它会引发错误。这就是格式的用途。
  • @user1181824 这甚至与 MS Access 中的格式相差甚远。格式纯粹是展示,不是要求。

标签: .net database vb.net ms-access autonumber


【解决方案1】:

你只能访问“02”吗?您编写的查询忽略了“02”,因此看起来您需要对这条信息进行一次查询。
我不是 vb 或访问方面的专家,但看起来你可以使用一个快速'n'dirty 的解决方案:你写的,你的密钥的形式是“02”000。我会自己取出每个数字,检查位数,将其转换为字符串并填充所有缺少的前导零,因为您知道最大位数。

参考整体 cmets 显示的内容: 动态填充前导零并按名称引用您的表,以通过 if 子句决定您的房间 ID 是以 R01 还是 R02 开头。

【讨论】:

  • 如果我无法从 vb 访问所有数字,我将如何单独取出每个数字?
  • 问题:你有两个不同的列包含你的两个数字吗? 02从哪里来?关于您的原始帖子,听起来应该超过 02。所以我的问题是,您在哪里确定的。如果每个房间都有这个 02,那就不用担心了,手动写吧。
  • 不,它在一列之下。基本思想是我有 4 个表,每个表都有自己的主键。第一张表的所有主键都以 01 开头,第二张表以 02 开头,第三张表以 03 开头,第四张表以 04 开头。这样我可以区分主键。房间是第二张桌子,因此所有房间都以 02 开头。自动编号仅更改最后 3 个数字。因此,当我说“02”000 时,最后 3 000 个是自动编号,但它们都以 02 开头。
  • 所以你有四个不同的表,每个表都有一个以 000 开头的 3 位主键?那么你如何告诉你的查询它必须查找哪个表呢?因为看起来你可以从中得到你的“02”。你说a)你只收到1而不是02001,b)你有不同的表[命名为01、02?]和c)每个表都有自己的主键。所以我会说查找主键不能给你表的键。你明白?还是您将所有四个表合并为一个?
  • 表格不是以 01、02 命名的......它们是正确的词。主键是唯一的,因为它们以 01、02、03 和 04 开头。
【解决方案2】:

你可以在你的应用中格式化数字:

Dim roomID As String = ds.Tables("sqlSpecRoomRequest").Rows(i).Item(1)
PeriodRoomID.Name = "R02" & roomID.PadLeft(3, "0"c)

【讨论】:

  • 嘿,这行得通 :) 虽然你能解释一下 PadLeft 的作用,微软的解释没有多大意义,谷歌也没有。
  • PadLeft(3,"0"c) 使字符串长度为 3 个字符,必要时在左侧添加零(字符 0)。
【解决方案3】:

我建议您有一个格式设置为“02”000 的自动编号字段。该格式所做的只是以该格式向 Access 用户显示数据。该字段不包含 02001,它包含 1。如果您希望重新创建格式,则必须在您的应用程序中这样做。将自动编号更新为 n 将在 ADO 和 ODBC 中显示为 n,但在 Access 的不同位置显示为 0200n - 这种格式甚至与 Access 中的查询无关。我认为表格中的格式不是一个好主意。

【讨论】:

  • 如果您重新阅读我的回答,您会注意到它指出了与您的查询相关的信息,即格式与您的查询无关。
猜你喜欢
  • 1970-01-01
  • 2015-01-13
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多