【问题标题】:SQL Command "Enter Parameter Value" With ComboBox Data带有 ComboBox 数据的 SQL 命令“输入参数值”
【发布时间】:2016-09-25 18:52:19
【问题描述】:

我目前有以下代码

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 ManfactQuery = Null Or ManfactQuery = Null Then
strSQL = "SELECT [Solutions].SolutionText FROM [Solutions] WHERE [Solutions].ModelSolution = " & ModelQuery & ""

    Else

        If ModelQuery = Null Or 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

我试图将组合框的文本值传递到 SQL 语句中,它可以在一定程度上起作用,但我得到“输入参数值”弹出对话框。如果我然后输入组合框的值并单击确定,它会使用适当的字段填充列表框,但如果可能的话我不需要对话框。

有什么想法吗?

【问题讨论】:

  • 我已经阅读了它,但我个人无法让它工作。我大概是傻了吧? :( 如果这有什么不同,我正在使用 Access 2013
  • 好的 - 你有没有被卡在一个台阶上?你收到错误了吗?这听起来像是 MS 错误而不是编码问题。换句话说 - 我不能给你任何代码来解决这个问题。
  • 我没有收到错误,但它只是从表单本身带出了一堆数据。问题是,这不是一个查询,它只是硬编码到按钮“db_search”中所以我认为 SQL 命令没有正确读取从 ManfactQuery 或 ModelQuery 传递的值。组合框从另外 2 个表中提取数据,然后 db 搜索引用第三个
  • 可能是因为我在组合框上使用 .Column(1) 而不是值。我只对组合框中包含的文本感兴趣

标签: sql ms-access vba ms-access-2013


【解决方案1】:

首先你可能是这个意思:

If ManfactQuery = Null Or ManfactQuery = Null Then

变成这样:

If ManfactQuery = Null Or ManfactQuery = "" Then

它可以更好地表示如下:

If Nz(ManfactQuery)="" then

现在到实际问题。由于ManfactQueryModelQuery 是文本值,因此它们需要在SQL 文本中用单引号括起来,如下所示:

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

【讨论】:

  • 谢谢!我会尽快处理的,稍后再报告
  • 进行了相应的调整,但是当我现在点击按钮时,参数值对话框没有出现,但是我没有看到任何东西出现在 lsitbox 中,不像手动将值输入到对话框中跨度>
  • 您在这里可能还有一个问题:ManfactQuery = Me.cboManfact.Column(1) ModelQuery = Me.cboModel.Column(1) 尝试将 Column(1)(或任何具有您要查找的实际值的列)设置为绑定列并使用 ManfactQuery = Me.cboManfact ModelQuery = Me.cboModel 然后验证您通过MsgBox(ManfactQuery) 获得了正确的值
  • 现在都解决了,Knight,非常感谢。你完美地解决了我的问题!
【解决方案2】:

解决了。非常感谢@Charlie 和@SunKnight0

代码如下:

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 Len(ModelQuery) = 0 Then

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

    Else

If Len(ManfactQuery) = 0 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

非常感谢大家,经过 3 天的尝试,我明白了!

【讨论】:

  • 谢谢,我会修改这个:)
猜你喜欢
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 2016-02-24
相关资源
最近更新 更多