我正在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也是一个字符串变量,表示要搜索的特定条件。我相信我的问题都归结为我使用引号,括号和双引号。
谢谢!
答案 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 & "'")