在SQL查询中使用表单控件作为字段选择器
我正在尝试构建一个名为UI的表单,用户将从组合框cmbFilter中选择一个尺寸参数,然后在文本框TXTOLENTS中添加+/-公差。从列表中选择零件号后,应返回该参数公差范围内类似零件号的结果。表中的字段名是维度参数,是表单加载代码中组合框的.AddItem 例如。Part1 OD为5,因此我选择OD作为搜索参数,然后将公差设置为+/-1。结果应显示外径为6的零件2,而不是外径为7的零件3 我已将listboxs行源设置为查询,但 无论我在这段代码中修改了什么语法,我都会得到操作或语法错误。所以我假设我引用的表单控件不对,或者我的逻辑不对 我已经厌倦了access中SQL设计视图中的以下代码 SQL 我也尝试过在access vba中编写SQL代码,但仍然没有成功,下面的代码只是一个简单的文本,我知道它现在的逻辑与上面的相同在SQL查询中使用表单控件作为字段选择器,sql,vba,ms-access,Sql,Vba,Ms Access,我正在尝试构建一个名为UI的表单,用户将从组合框cmbFilter中选择一个尺寸参数,然后在文本框TXTOLENTS中添加+/-公差。从列表中选择零件号后,应返回该参数公差范围内类似零件号的结果。表中的字段名是维度参数,是表单加载代码中组合框的.AddItem 例如。Part1 OD为5,因此我选择OD作为搜索参数,然后将公差设置为+/-1。结果应显示外径为6的零件2,而不是外径为7的零件3 我已将listboxs行源设置为查询,但 无论我在这段代码中修改了什么语法,我都会得到操作或语法错误。所
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