Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL查询中使用表单控件作为字段选择器_Sql_Vba_Ms Access - Fatal编程技术网

在SQL查询中使用表单控件作为字段选择器

在SQL查询中使用表单控件作为字段选择器,sql,vba,ms-access,Sql,Vba,Ms Access,我正在尝试构建一个名为UI的表单,用户将从组合框cmbFilter中选择一个尺寸参数,然后在文本框TXTOLENTS中添加+/-公差。从列表中选择零件号后,应返回该参数公差范围内类似零件号的结果。表中的字段名是维度参数,是表单加载代码中组合框的.AddItem 例如。Part1 OD为5,因此我选择OD作为搜索参数,然后将公差设置为+/-1。结果应显示外径为6的零件2,而不是外径为7的零件3 我已将listboxs行源设置为查询,但 无论我在这段代码中修改了什么语法,我都会得到操作或语法错误。所

我正在尝试构建一个名为UI的表单,用户将从组合框cmbFilter中选择一个尺寸参数,然后在文本框TXTOLENTS中添加+/-公差。从列表中选择零件号后,应返回该参数公差范围内类似零件号的结果。表中的字段名是维度参数,是表单加载代码中组合框的.AddItem

例如。Part1 OD为5,因此我选择OD作为搜索参数,然后将公差设置为+/-1。结果应显示外径为6的零件2,而不是外径为7的零件3

我已将listboxs行源设置为查询,但 无论我在这段代码中修改了什么语法,我都会得到操作或语法错误。所以我假设我引用的表单控件不对,或者我的逻辑不对

我已经厌倦了access中SQL设计视图中的以下代码

SQL

我也尝试过在access vba中编写SQL代码,但仍然没有成功,下面的代码只是一个简单的文本,我知道它现在的逻辑与上面的相同

Private Sub btnSearch_Click()
Dim SQL As String
If txtTolerance = "" Then
    MsgBox ("No Tolerance Entered")
    Exit Sub
ElseIf cmbFilter = "" Then
    MsgBox ("No Filter Criteria Entered")
    Exit Sub
Else

    SQL = "SELECT Part_Matrix.[Part_Number], " & Me.cmbFilter & " " & _
    "FROM Part_Matrix" & _
    "ORDER BY " & Me.cmbFilter & " DESC;"

    Debug.Print SQL
    DoCmd.RunSQL SQL
    lbFilterResults.RowSource = SQL
    lbFilterResults.Requery
End If
End Sub

在BETWEEN语句中,引用表的[Large_OD]字段,而不是表单的

i、 e


尝试使用dlookup而不是SELECT来返回您想要在BETWEEN语句中返回的值。我认为dlookup应该返回您在组合框中选择的任何字段的值。此外,我还简化了删除表单的步骤!UI语句,假设您运行的代码来自同一表单。让我知道这对你是否有效

intTarget = dlookup(me!CmbFilter, "PartMatrix", "Part_Number = " & me!LbSelected)
intLower = intTarget - me!txtTolerance
intUpper = intTarget + me!txtTolerance

    strSQL = "SELECT * FROM Part_Matrix WHERE " & me!cmbFilter & " " & _
          "BETWEEN " & intLower & " AND " & intUpper

…由…订购。。。您需要在查询中的单词之间留出空格。您是在vba中谈论的吗?还是查询?您的SQL变量在VBA中的值:在Part_矩阵和ORDER@TimWilliams@geeFlo好的,我想我有点详细了。如果您能帮助我从组合框中选择*Selected Field From Combobox Here*From Part_Matrix,并且SQL从组合框中返回文本字段名178次,每个记录返回1次,那么我只想让下面的内容起作用。它不是从特定字段的记录中选择值。谢谢techspider。这是一个新手,不知道如何阻止这样的代码。用户更改搜索参数,它并不总是很大。关键是在组合框中选择的任何字段名称都是搜索参数,其中选择了搜索参数。我举的例子很大。它可能很小,BPT,有13种不同的选择。我想我现在明白了。查看我刚刚发布的另一个答案。我喜欢这一点,但我在查询表达式“[Part_Number]=01.N221.10 01.N221.10是LBSelectedah得到的,intTarget=DLookupForms!”![用户界面]!cmbFilter,Part_Matrix,Part_Matrix.Part_Number='&Me!lbSelected.Value&'。你错过了结尾的&“和开头的”。谢谢你的帮助!啊,是的,可怕的字符串vs数字ID。很高兴它为你解决了。
 WHERE Large_OD
  BETWEEN (((SELECT  Large_OD FROM Part_Matrix WHERE Part_Number = [Forms]![UI]![lbSelected])   - [Forms]![UI]![txtTolerance])
  AND ((SELECT  Large_OD FROM Part_Matrix WHERE Part_Number = [Forms]![UI]![lbSelected])   + [Forms]![UI]![txtTolerance]))
 ORDER BY " & Me.cmbFilter & " DESC;
intTarget = dlookup(me!CmbFilter, "PartMatrix", "Part_Number = " & me!LbSelected)
intLower = intTarget - me!txtTolerance
intUpper = intTarget + me!txtTolerance

    strSQL = "SELECT * FROM Part_Matrix WHERE " & me!cmbFilter & " " & _
          "BETWEEN " & intLower & " AND " & intUpper