MS使用变量访问DLookUp

时间:2013-10-21 11:56:48

标签: ms-access

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

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

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

表(Control_Number,Description)

每个表都有四条记录,其中'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也是一个字符串变量,表示要搜索的特定条件。我相信我的问题都归结为我使用引号,括号和双引号。

谢谢!

3 个答案:

答案 0 :(得分:2)

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

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

但尝试将设计模式中的属性设置为

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

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

答案 1 :(得分:1)

我意识到这是一篇很老的文章,但这对我有帮助:

我成功完成了以下工作,其中fieldName是一个包含表字段名称的字符串: 请注意括号内方括号的位置

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

它帮助我解决了一个糟糕的命名约定,即我不得不从中收集数据field1, field2...8

答案 2 :(得分:0)

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

所以dlookup(“ [FieldA]”,“ tableName”,“条件”)

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 & "'")