2

我有一个数据库,我们用它来从 AutoCAD 中的标签创建材料明细表。由于这种性质,我需要创建 3 个单独的查询。一种用于我们的“钢”,一种用于我们的“非钢”,一种用于我们的“未切割管”。

查询的 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));

未切割管:

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;

我有一个选择作业编号的组合框(用于主管和未切割管,例如 13-1302)和一个显示 JobID 的文本框(用于非钢)。

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

编辑


我现在想通了。(谢谢埃利亚斯)

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

我将把我的 Button 的代码放在下面,这样任何人都可以使用它并引用它:

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

这完全可以正常工作,没有错误或任何东西。

4

1 回答 1

2

这在表格内正确吗?

如果是这样,请将您输入的手动值替换为

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! &"));
于 2013-08-08T12:22:29.393 回答