在 MS Access 组合框中,如何将表单值用作 where 类

Posted

技术标签:

【中文标题】在 MS Access 组合框中,如何将表单值用作 where 类【英文标题】:In MS Access combo box,how to use form value as where class 【发布时间】:2021-04-03 08:43:24 【问题描述】:

我在组合框中使用以下查询来显示基于表单文本框字段作为参数的表中的数据,但组合框不显示数据。请注意,主项目表中的 itemid 字段是字符串。

SELECT [Item].[ID], [Item].[ItemCode], [Item].[ItemName], [Item].[Price_USD], 
[Item].[Price_GBP], [Item].[Price_THB], [Item].[Price_AED], [Item].[Price_AED_VAT], 
[Item].[Price_SAR], [Item].[Price_SAR_WHT], [Item].[Hogan_Cost_USD] 
FROM Item WHERE [ItemCode]='Forms!Order_Detail subform!itemid'; 

【问题讨论】:

不要在单引号中包含对表单文本框的引用。如果您使用查询生成器来帮助获得正确的 SQL 构造,那么这些撇号不应该存在。如果您对实际值进行硬编码,请使用撇号:[ItemCode]='abc' 不带撇号出现以下错误" Syntex error missing operator in query operation '((([ItemCode])=Forms!Oder_Derail subform!itemid))' 可能是因为 Order_Detail 子表单中的空间。将表单名称括在 [ ] 中。同样,查询生成器应该为您执行此操作。建议不要在命名约定中使用空格或标点符号/特殊字符(下划线除外)。 现在错误是为参数表单输入值!Order_detail 子表单!itemid,我认为系统仍然无法从子表单中正确读取 itemid 字段值。 哦,杂种,引用子表单必须首先引用父表单。 Forms!parentformname!subformcontainername.Form!itemid。我总是将容器命名为与其所持有的形式不同的名称,例如ctrDetail。但是如果这个组合框在子表单上并且你在 RowSource 属性中有这个 SQL 语句,那么试试=[itemid] 【参考方案1】:

如果这是一个查询对象,那么必须通过父表单和子表单容器控件来引用子表单。我总是将容器命名为与其持有的对象不同的名称,例如 ctrDetailsWHERE [ItemCode]=Forms!parentformname!ctrDetails.Form!itemid;

如果这条SQL语句直接在combobox RowSource中,combobox和textbox一起在subform上,直接引用textbox即可。我总是将控件命名为不同于字段的名称,例如 tbxIC:WHERE [ItemCode]=[tbxIC]

您是否从 Item 表中提取每个字段?如果是这样,可以使用通配符缩短 SQL:SELECT * FROM Item WHERE [ItemCode]=[tbxIC];

【讨论】:

感谢您的详细反馈,关于上述问题的最后一个查询。这是否可能我将在查询中使用特定于 where 类的字段,例如,如果项目表中的字段名称是 price_usd、price_gbp 那么我将查询其中 tablename.fieldname 像 "*GBP" RowSource 中的查询对象或 SQL 语句中的字段名称不能是动态的。使用该表结构,必须使用 VBA 来构建 SQL 并设置组合框 RowSource 属性。如果您需要更多帮助,请发布另一个问题。如果不是 2 个价格字段,而是价格和货币类型,则:WHERE CurrencyType = [tbxCT]

以上是关于在 MS Access 组合框中,如何将表单值用作 where 类的主要内容,如果未能解决你的问题,请参考以下文章

MS ACCESS 2007 - 从子表单中的组合框中选择值会创建重复值

将文本框中的值插入 2 个不同的表 ms-access

当用户从 MS Access 的组合框中选择“其他”时,如何显示输入表单?

如果表单未绑定,如何选择 MS Access 组合框中的第一项

MS Access 07-10,希望能够将字段放入列表/组合框中

从子表单的组合框中选择下拉菜单后,MS Access 在主表单中填写 ID