将字符串与通配符组合在一起

时间:2015-11-19 23:57:55

标签: vba ms-access access-vba

我正在编写一个VBA代码,它将从访问数据库中的特定行返回数据。我使用的数据非常简单,我是VBA编码的完全新手,所以如果这是一个愚蠢的问题,请不要评判我。

我有以下代码,在用户更新表单中的文本框后运行:

>>> print(img)
[[0 1 0 0 2]
 [0 1 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 3]]

我正在尝试在DLookup函数中搜索变量VarW,最后添加两个通配符。如果我用'Couch Center 224E-1'替换VarW,我的预期结果就会出现。

有两个学生住在一个房间,一个在沙发中心224E-1,一个在沙发中心224E-2。理想情况下,我会扩展代码以使用通配符返回两个学生(我知道DLookup只返回一个结果)。

现在,如果直接值被输入到DLookup语法或VarW中,DLookup只会返回值。

2 个答案:

答案 0 :(得分:0)

首先,您应该使用VarW值

连接where-string
VarA = DLookup("[Name First] & ' ' & [Name Last] & ' ' & [Student Number]", "[Student Bookings (term 84)]", _
  "[Room Space Description] like '" & VarW & "??'")

其次,使用Recordset。 您也可以使用“我”作为当前表格,而不是“[表格]![返回学生信息]!”

Sub Text2_AfterUpdate()

  Dim VarA As Variant
  Dim VarW As Variant
  Dim Rs As Recordset

  VarW = Left(Me.Text2, InStr(Me.Text2, "-") - 1)

  Set Rs = CurrentDb.OpenRecordset("SELECT * FROM [Student Bookings (term 84)] WHERE [Room Space Description] like '" + VarW + "??'", dbOpenSnapshot)
  While Not Rs.EOF 'loop for each rows that query returned
    MsgBox (Rs![Name First] & " " & Rs![Name Last] & " " & Rs![Student Number])) 
  Wend
  Set Rs = Nothing
End Sub

另外,如果你不喜欢“concat-style”,还有另外一种方法。它使用存储的参数查询。

答案 1 :(得分:0)

问题是您DLookUp的标准。试试这个:

Sub Text2_AfterUpdate()

Dim VarA As Variant
Dim VarW As Variant



VarW = Left(Me.Text2, InStr(Me.Text2, "-") - 1)

VarA = DLookup("[Name First] &' '& [Name Last] &' '& [Student Number]", "Student Bookings (term 84)", _
"[Room Space Description] like '" & VarW & "??'")

MsgBox (VarW)
Text0.Value = VarA

End Sub