【问题标题】:Use a ComboBox Value as part of an SQL Query? (MS Access 2010-2013)使用组合框值作为 SQL 查询的一部分? (MS Access 2010-2013)
【发布时间】:2013-08-08 12:20:25
【问题描述】:

我有一个数据库,我们用它来从 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)的组合框和一个显示作业 ID(非钢)的文本框。

有没有一种方法可以设置上面显示的 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

这完全按照它应该的方式工作,没有错误或任何东西。

【问题讨论】:

  • 我想通了。非常感谢 Elias。他们评论中的代码适用于我的非钢查询,但钢有点难,如下(在 VBA 中),Dim strSQL As String Dim Field As String Field = [Forms]![frmBOM_Combined]![Text26 ].[Value] strSQL = "SELECT DISTINCT [TOTAL-LENGTH-WEIGHT], MATERIAL, ORDER FROM " & "[" & [Field] & "]" & " ORDER BY [ORDER];" Debug.Print strSQL CurrentDb.OpenRecordset strSQL
  • 很抱歉后半天没能帮上忙。忙了。很好的发现,祝你好运!
  • 没关系。在相关说明中,我还有一个问题。我有这个 VBA 代码作为模块运行,但是如何将它设置为记录集?
  • 你必须创建一个记录集和数据库对象Dim dbs As Database, Dim rstSQL As DAO.Recordset, Set dbs = CurrentDb
  • 然后你打开一个记录集Set rstSQL = dbs.OpenRecordset(QueryHere)

标签: sql ms-access


【解决方案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! &"));

【讨论】:

  • 我也应该使用引号吗?
  • 查询在哪里执行?这取决于
  • 查询是在加载弹出表单时运行的独立查询。编辑:对不起,我没有意识到 Enter 提交了评论。这是 mt 表/表单/查询/等的列表。 mediafire.com/?vb0p2tt9l7adceh 这是显示我需要使用的(现在是 2 个)文本框的菜单。 mediafire.com/?s7edrurhyl8iu8o 这是弹出式表单本身的链接:mediafire.com/?qa72ad3xx26jcup
  • 你看到我对评论的编辑了吗?加载弹出表单时,如上图所示,查询中的值显示在各种文本框中。
  • 我目前无法查看。虽然如果您列出表单名称以及查询将产生的控件类型,我现在可以提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多