使用ComboBox值作为SQL查询的一部分? (MS Access 2010-2013)

时间:2013-08-08 12:20:25

标签: sql ms-access

我有一个数据库,用于从AutoCAD中的标签创建材料清单。由于这个性质,我需要创建3个单独的查询。一个是我们的“钢铁”,一个是我们的 “非钢铁”,以及我们的“Uncut Tubes”。

查询的SQL如下:

钢:

SELECT DISTINCTROW Sum([CUT-LENGTH-WEIGHT]) AS [SumOfCUT-LENGTH-WEIGHT], Sum([CUT-SHEET-WEIGHT]) AS [SumOfCUT-SHEET-WEIGHT], Sum([TOTAL-SHEETING-WEIGHT]) AS [SumOfTOTAL-SHEETING-WEIGHT], Sum([TOTAL-ITEM-WEIGHT]) AS [SumOfTOTAL-ITEM-WEIGHT]
FROM [13-1302 Cut-Lengths]; 

非钢:

SELECT tbl2013BOM.fJobID, Sum(tbl2013BOM.fWeight) AS SumOffWeight
FROM tbl2013BOM
GROUP BY tbl2013BOM.fJobID
HAVING (((tbl2013BOM.fJobID)=23));

Uncut Tubes:

SELECT DISTINCT [13-1302 Cut-Lengths].[TOTAL-LENGTH-WEIGHT], [13-1302 Cut-Lengths].MATERIAL, [13-1302 Cut-Lengths].ORDER
FROM [13-1302 Cut-Lengths]
ORDER BY [13-1302 Cut-Lengths].ORDER;

我有一个ComboBox,可以选择作业编号(对于Main和Uncut Tubes,例如13-1302)和一个显示JobID(对于非钢材)的文本框。

有没有办法可以设置上面显示的SQL来查看ComboBox和TextBox值,而不是我必须手动更改它们?

修改


我现在想出来了。 (谢谢Elias)

基本上,我不能在表上使用Field作为SQL中的RecordSource,换句话说,Combo26不能是SQL查询中的表。但是,可以做的是使用VBA将该值注入SQL定义,然后将该定义用作Recordsource。

我会将我的按钮的代码放在下面,以便任何人都可以使用它并引用它:

Private Sub Command27_Click()

    Dim dbs As Database
    Dim rstSQL As DAO.Recordset
    Dim strSQL As String
    Dim strSQL2 As String
    Dim strSQL3 As String

    Dim Field As String
    Set dbs = CurrentDb

    Field = [Forms]![frmBOM_Combined]![Text26].[Value]

    strSQL = "SELECT DISTINCTROW Sum([CUT-LENGTH-WEIGHT]) AS [SumOfCUT-LENGTH-WEIGHT], Sum([TOTAL-SHEETING-WEIGHT]) AS [SumOfTOTAL-SHEETING-WEIGHT], Sum([TOTAL-ITEM-WEIGHT]) AS [SumOfTOTAL-ITEM-WEIGHT] FROM " & "[" & [Forms]![frmBOM_Combined]![Text26].[Value] & "]" & ";"
    strSQL2 = "SELECT tbl2013BOM.fJobID, Sum(tbl2013BOM.fWeight) AS SumOffWeight FROM tbl2013BOM GROUP BY tbl2013BOM.fJobID HAVING (((tbl2013BOM.fJobID)= " & [Forms]![frmBOM_Combined]![Combo25].[Value] & "));"
    strSQL3 = "SELECT DISTINCT [TOTAL-LENGTH-WEIGHT], [MATERIAL], [ORDER] FROM " & "[" & [Forms]![frmBOM_Combined]![Text26].[Value] & "]" & " ORDER BY [ORDER];"

    Debug.Print strSQL
    Debug.Print strSQL2
    Debug.Print strSQL3

    DoCmd.OpenForm ("frmEstWeight")

    Forms!frmEstWeight.RecordSource = strSQL
    Forms!frmEstWeight.frmTestBomWeight.Form.RecordSource = strSQL2
    Forms!frmEstWeight.frmTotalLengthWeight.Form.RecordSource = strSQL3

End Sub

这完全正常,没有任何错误或任何错误。

1 个答案:

答案 0 :(得分:1)

这是在形式正确吗?

如果是,请用

替换您输入的手动值
REST OF THE QUERY HERE " & Me!Controlname.value & " REST OF THE QUERY HERE

如果你正在使用带控制源的东西,那么只需重置控制源值。

me!ControlWithResult.control source = "SELECT tbl2013BOM.fJobID, Sum    (tbl2013BOM.fWeight) AS SumOffWeight
FROM tbl2013BOM
GROUP BY tbl2013BOM.fJobID
HAVING (((tbl2013BOM.fJobID)=" & me!controlname.value & "));"

对于非钢铁试一试:

在弹出窗体的VBA上

me!Combo25.rowsource = "SELECT tbl2013BOM.fJobID, Sum(tbl2013BOM.fWeight) AS SumOffWeight
FROM tbl2013BOM
GROUP BY tbl2013BOM.fJobID
HAVING (((tbl2013BOM.fJobID)=" & forms!MAINFORMNAME! &"));