无法将 Access 记录中的一列与同一记录中的另一列等同

问题描述 投票:0回答:1

我正在使用 Access 版本 MS 365 Apps for enterprise(桌面版)。

当我尝试从表中获取特定字段值时,我得到的结果相当于空或空结果。

我正处于调试阶段。我在这里提供了一个简短的示例,以便您可以看到该字段读取为 Null(即,它表示我调用的组合框值是 ID 值(它应该是一个名称),并且我的表中没有条目“缩写”字段,与该记录关联):

Selected value is the ID number, not the LastName field value, and there seems to be no other fields

在我的表“People”中,自动生成的 ID 作为一列包含在内,我的表中只有 4 列(字段):

[设计视图]

 ID - AutoNumber
 LastName - Long Text
 Type - Long Text
 Initials - Long Text

我的表只有 9 个条目,如下所示:

[数据表查看]

身份证 姓氏 类型 姓名缩写
1 姓氏1 女士1 LNI1
...
9 姓9 9博士 LNI9

我正在使用“People”表创建面板。

在用户表单中,我有未绑定的组合框作为姓氏的输入:cmbo_LastName1(行源“People”,行源类型“表/查询”,绑定列“1”),cmbo_LastName2(相同),cmbo_LastName3(相同)。

在表单视图中,当我使用组合框时,我会看到选择时显示的姓氏(所以我知道它正确地浸入我的表格中)。不显示 ID 值。

我还将“People”表中的“Initials”值调用到我的代码中,因为我的输出(报告)将包含该信息:

Dim selectedName As Variant
Dim P1Initials As Variant

' Get the selected name from the combo box
selectedName = Me.cmbo_LastName1.Value

' Lookup to get the corresponding initials
P1Initials = DLookup("Initials", "People", "LastName = '" & selectedName & "'")

' Check for Null before assigning
If Not IsNull(P1Initials) Then
    ' Convert to String if not Null
    P1Initials = CStr(P1Initials)
Else
    ' Handle the case when no matching record is found
    P1Initials = "N/A"
End If

' At this debug stage, output the result
MsgBox "Selected Name: " & selectedName & vbCrLf & _
       "Corresponding Initials: " & P1Initials

上面的代码给了我一个 Selected Name 作为 ID 号,而不是 LastName 值。我只能通过强制代码来获取 LastName 值:“selectedName = Me.cmbo_LastName1.Column(1)”——我不清楚为什么它不在第 2 列上:即第 1 列应该是 ID,这将使姓氏第 2 栏。

当我尝试使用 P1Initials = Me.cmbo_LastName1.Column(3)" (认为很聪明)时,导致了空错误(也在第 2 列和第 4 列上)。

我必须错过一些简单的东西。

我本以为从记录中的一列中收集值并将其相等并从同一记录中的另一列中吐出值会很容易,而不必直接从用户那里收集组合框中的信息。

我不想在“Initials”上有第二个组合框(因为我实际上要对“People”表中的信息做更多的事情,并且我不想收集每一个小信息在表中找到)。

我已经尝试过了

  1. 修复数据库
  2. 重新创建表格
  3. 确保第一列宽度为0
  4. 确保列数为 4

编辑 最后,得知 ID 的列索引为 0,我最终暴力破解了这个问题:

NamePanel1 = Me.cmbo_LastName1.Column(1)                    NamePanel2 = Me.cmbo_LastName2.Column(1)
NamePanel3 = Me.cmbo_LastName3.Column(1)
P1Initials = Me.cmbo_LastName1.Column(3)
P2Initials = Me.cmbo_LastName2.Column(3)
P3Initials = Me.cmbo_LastName.Column(3)

我一直不明白为什么 LastName 值不断恢复为 ID。

ms-access combobox null dlookup
1个回答
0
投票

最后,得知 ID 的列索引为 0,我最终暴力破解了这个问题:

NamePanel1 = Me.cmbo_LastName1.Column(1)                    NamePanel2 = Me.cmbo_LastName2.Column(1)
NamePanel3 = Me.cmbo_LastName3.Column(1)
P1Initials = Me.cmbo_LastName1.Column(3)
P2Initials = Me.cmbo_LastName2.Column(3)
P3Initials = Me.cmbo_LastName.Column(3)

我一直不明白为什么 LastName 值不断恢复为 ID。

© www.soinside.com 2019 - 2024. All rights reserved.