运行宏后,列表框中的列表消失

时间:2019-04-23 14:06:49

标签: vba ms-access access-vba access

我有一个简单的数据库,其中有两个表,一个查询(用于联接表),一个查询形式由文本框和列表框组成(请参见下图)。

form example

我正在尝试在输入时使用文本框搜索列表框(如本视频所示:youtube video)

我复制了代码(很少编辑名称),但是由于某种原因,它使整个列表中断(丢失所有条目)并且不起作用(在下面键入后结果的屏幕截图)。即使删除条目,列表也不会恢复正常。

broken list

我做错了什么?

我的代码:

Private Sub searchBox_Change()

    Dim strSource As String
    strSource = "SELECT  Paraiškos ID, Veikliosios m pavadinimas, Sugalvotas VP pavadinimas" & _
     "FROM Oldsys_Main" & _
     "Where Paraiškos ID Like '*" & Me.searchBox.Text & "*' " _
     & "Or Veikliosios m pavadinimas Like '*" & Me.searchBox.Text & "*' " _
     & "Or Sugalvotas VP pavadinimas Like '*" & Me.searchBox.Text & "*' "

    Me.oldListBox.RowSource = strSource
End Sub

另一个(目前不重要)的问题:为什么第5列的结果是数字?应该是文本,是因为5列是与另一个表链接的,是否可以使其显示文本而不是ID?

1 个答案:

答案 0 :(得分:3)

这不是有效的SQL语法。标识符(例如列名)不允许使用空格或特殊字符(_除外)。如果有,则必须将名称括在方括号中。

FROM之前和Oldsys_MainWHERE之间还有一个空格,因为换行符位于VBA代码本身之内,但不在构造的字符串之内。如果要在字符串中添加换行符,可以使用"first line" & vbCrLf & "second line"进行。但是SQL可以在一行上很好地工作。

Dim strSource As String, strSearch As String

strSearch = Replace(searchBox.Text, "'", "''")
strSource = "SELECT [Paraiškos ID], [Veikliosios m pavadinimas], [Sugalvotas VP pavadinimas] " _
 & "FROM Oldsys_Main " _
 & "WHERE [Paraiškos ID] LIKE '*" & strSearch & "*' " _
 & "Or [Veikliosios m pavadinimas] LIKE '*" & strSearch & "*' " _
 & "Or [Sugalvotas VP pavadinimas] LIKE '*" & strSearch & "*' "

此外,将搜索文本中的单引号替换为两个单引号以对其进行转义。像Let's go这样的文本将变成'Let''s go'


您可以像这样测试SQL:

  • 使用 Ctrl-G 打开立即窗口。
  • Copy将代码粘贴到其中并进行更改(以“ {?”开头,它等效于Debug.Print,将变量strSearch替换为真实文本字符串(例如{ {1}}),然后按Enter

      

    ?“ SELECT [ParaiškosID],[Veikliosios m pavadinimas],[Sugalvotas VP pavadinimas]” _
       &“ FROM Oldsys_Main” _
       &“ WHERE [ParaiškosID] LIKE'*”&“ est”&“ *'” _
       &“或[Veikliosios m pavadinimas]喜欢'*”&“ est”&“ *'” _
       &“或[Sugalvotas VP pavadinimas]喜欢'*”&“ est”&“ *'”

    结果将这样打印(一行):

      

    从Oldsys_Main中的[ParaiškosID],[Veikliosios m pavadinimas],[Sugalvotas VP pavadinimas]中选择[ParaiškosID],例如'* est *'或[Veikliosios m pavadinimas]喜欢'* est *'或[Sugalvotas VP ]喜欢'* est *'

  • 将此结果复制到剪贴板中,并在设计视图中创建一个新查询。切换到SQL视图并将结果粘贴到其中。

  • 现在执行查询。您将查看它是否有效,或者是否收到错误消息。此外,语法错误(如缺少空格)也很明显。