【问题标题】:Selecting results from table based on combo box data根据组合框数据从表中选择结果
【发布时间】:2020-07-13 20:07:29
【问题描述】:

首先,我对我缺乏 SQL 知识表示歉意。

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

TroubleshootPage

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

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

在“cboManfact”中选择的制造商必须匹配“解决方案”表中的“制造商解决方案”,如果匹配则返回“解决方案文本”。 “cboModel”和“ModelSolution”也一样。

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

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

这可能发生在用户选择组合框中的选项或单击绿色搜索图标时

我遇到的问题是 SQL 查询。我目前在用户单击搜索按钮时发生以下情况

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

现在已经很接近了,求指教

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

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

    您的代码有一些问题。首先,docmd.RunSQL 不能用于选择查询。此 (SELECT) 不是操作查询,此命令仅用于操作查询。例如删除、更新、更改、选择...进入。

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

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

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

    这就是我要做的:

    将列表框的行源更改为查询:

    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 的意图是什么?

    【讨论】:

    • 你先生是明星。我会尽快调整代码并回复您。非常感谢你:)
    • [SolutionText] 是表中的一个字段,用于存储所选特定型号/制造商的故障排除步骤。这是我需要在列表框中显示的信息。列(1)存储制造商的实际名称,而不是我需要的列(0)中的 ID。 strTableName 无关紧要,已被删除
    • 对不起,我在列表框中找不到“记录源”,只有控件和行源?任何想法
    • @Batterdburrito 对不起,我的意思是行源。
    • 我收到了一个错误。它在表达式中显示“未定义的功能'forms!Troubleshoot!cboManfact.Column'
    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 2021-02-23
      • 1970-01-01
      相关资源
      最近更新 更多