根据组合框数据从表中选择结果

时间:2016-05-25 10:09:20

标签: sql vba access-vba

首先,我为我缺乏SQL知识而道歉。

我目前在表单上有两个组合框,列表框看起来像附加图像

TroubleshootPage

第一个组合框引用了一个包含制造商列表的表格,然后第二个“模型”组合框更新了与第一个组合框数据匹配的型号

下面的列表框需要显示“解决方案”表中的数据。只有“SolutionText”栏目

“cboManfact”中选择的制造商必须匹配“解决方案”表中的“ManufacturerSolution”,如果匹配则返回“SolutionText”。 “cboModel”和“ModelSolution”相同。

我不希望列表框显示任何制造商或模型文本,只需按下按钮db_search时的“SolutionText”字段。

感谢@LiamH的帮助,我目前在列表框的RowSource上有以下SQL命令

当用户在组合框中选择选项或单击绿色搜索图标

时,可能会发生这种情况

我遇到的问题是SQL Query。当用户点击搜索按钮

时,我目前发生了以下情况
SELECT [SolutionText] FROM [Solutions] WHERE solutions.ManufacturerSolution like forms![Troubleshoot]!cboManfact & "*" AND solutions.ModelSolution like forms![Troubleshoot]!cboModel & "*"

它在列表框中显示SolutionText值,但是在单击“db_search”按钮时,列表框变为空

Private Sub dbSearch_Click() me.listbox.requery end sub

现在非常接近这个,任何建议

2 个答案:

答案 0 :(得分:0)

我假设你正在使用MS-Access,如果我错了,请纠正我。如果这是正确的,您可能需要考虑使用access-vba标记。

您的代码存在一些问题。首先,docmd.RunSQL不能用于选择查询。此(SELECT)不是操作查询,此命令仅保留用于操作查询。例如DELETE,UPDATE,ALTER,SELECT ... INTO。

当您使用多个where子句时,请使用单词AND而不是&符号。您不需要将SQL字符串连接在一起。查询中与表单值相关的字符串值需要封装在单引号中,如下所示:

"...WHERE NAME='" & Me.name & "'"

您可以使用debug.print strSQLmsgbox strSQL查看SQL查询如何读取任何错误。

  

所以这就是我要做的事情:

将列表框的rowsource更改为查询:

SELECT [SolutionText] FROM [Solutions] WHERE solutions.ManufacturerSolution like forms![FORM_NAME]!cboManfact.Column(1) & "*" AND solutions.ModelSolution like forms![FORM_NAME]!cboModel.Column(1) & "*"

like ... & "*"表示如果组合框为空,则会显示全部。

on_click事件需要一些VBA,即:

Private Sub dbSearch_Click()
     me.listbox.requery
end sub

重新查询将根据在组合框中选择的记录更改列表框项目。

  • 使用[Solution Text]时,我不知道您的意图是什么?

  • 您确定需要column(1)而不是column(0)吗?

  • 我不确定您对strTableName的意图是什么?

答案 1 :(得分:0)

使用以下代码解决了问题:

Private Sub dbSearch_Click()

Dim ManfactQuery As String
Dim ModelQuery As String
Dim strSQL As String

ManfactQuery = Me.cboManfact.Column(1)
ModelQuery = Me.cboModel.Column(1)

If Nz(ManfactQuery) = "" Then

strSQL = "SELECT [Solutions].SolutionText FROM [Solutions] WHERE [Solutions].ModelSolution = '" & ModelQuery & "'"

Else

If Nz(ModelQuery) = "" Then

strSQL = "SELECT [Solutions].SolutionText FROM [Solutions] WHERE [Solutions].ManufacturerSolution = '" & ManfactQuery & "'"

Else

strSQL = "SELECT [Solutions].SolutionText FROM [Solutions] WHERE [Solutions].ManufacturerSolution = " & ManfactQuery & " AND [Solutions].ModelSolution = " & ModelQuery & ""

End If

End If

Me.lstSolution.RowSource = strSQL

End Sub