0

我正在 MS Access 中构建一个表单,我希望根据用户在同一个表单上与之交互的两个下拉菜单从几个表中的一个中提取一些信息并填充到一个文本框中。在研究了这个之后,我发现 DLOOKUP 做了我想做的事情 - 唯一的问题是我在让它正常工作时遇到问题,并且我不断在文本框中出现“#NAME”。

我用 DLOOKUP 做了一些教程并取得了成功的结果,但将其应用于我的项目并没有成功。在我的项目中,Dlookup 的 FieldName 是静态的,即“描述”,但表名和标准都是动态的,作为变量传递给它。

目前我有四个表:tblAC、tblAT、tblAU 和 tblCA - 都遵循设计:

表(Control_Number,描述)

每个表有四个记录,以“Control_Number”作为主键。控制号是一个字符串 - 因为它可以包含字母。

到目前为止,我所拥有的是:

  Dim controlfamily1 As String
  Dim control1 As String

  controlfamily1 = "tbl" & CStr(Me.cboControlFamily.Value)
  control1 = CStr(Me.cboControls.Value)

     Me.txtDescription.ControlSource = DLookup("[Description]", controlfamily1, "[Control_Number] ='" & control1 & "'")

其中 controlfamily1 是字符串类型的变量 - 表示 DlookUp 中的 TableName。Control1 也是一个字符串变量,表示要搜索的特定条件。我相信我的问题都归结为我对引号、括号和双引号的使用。

谢谢!

4

3 回答 3

3

如果将表达式放在 ControlSource 中,则必须使用 "

Me.txtDescription.ControlSource = "=DLookup(""[Description]"", ""[tbl" & controlfamily1 & "]"", ""[Control_Number] ='" & control1 & "'"")"

但尝试在设计模式下将属性设置为

= DLookup("[Description]", "tbl" & CStr(Me!cboControlFamily), "[Control_Number] ='" & Me![cboControls] & "'")

并在需要时执行 Me.txtDescription.Requery

于 2013-10-21T12:08:00.803 回答
2

我意识到这是一个很老的帖子,但它帮助了我:

我在以下方面取得了成功,其中fieldName包含表字段名称的字符串: 注意括号内方括号的位置

DLookup("[" & fieldName & "]", "my_table", "id = " & my_id)

它帮助我处理了一个糟糕的命名约定field1, field2...8,我必须从中收集数据。

于 2019-03-04T05:41:07.203 回答
0

当您将表名作为字符串传递给某个变量时,您不需要使用“”。

所以 dlookup("[FieldA]","tableName","criterion")

或者

Dim tableNamezzz as String
tableNamezzz = Cstr(me.textboxCarryingTableName.value)
dlookup("[FieldA]", tableNamezzz, "Criterion")

如果要将列名作为变量传递到 dlookup 函数中,请使用以下命令:

Dim columnNamez as String
Dim tableNamez as String
    tableNamez = Cstr(me.textboxCarryingTableName.value)
    ColumnNamez = Cstr(me.textboxCarryingColumnName.value) 
DLookup("ID", TableNamez, ColumnNamez & "='" & Me.txtFieldValue & "'")
于 2019-08-22T19:37:23.000 回答