在 SQL 字段中使用 ComboBox 值的 MS 访问

Posted

技术标签:

【中文标题】在 SQL 字段中使用 ComboBox 值的 MS 访问【英文标题】:MS Access Using ComboBox Value in SQL Field 【发布时间】:2016-09-10 12:07:18 【问题描述】:

尝试设置一个查询,其中一个字段由组合框中的值选择。无法找出正确的语法。我在查询生成器的 SQL 视图中,使用以下内容:

SELECT Deviations.Deviation, Deviations.Rev, Deviations.Title, Deviations.Issued, Deviations.ExpiryDate, Deviations.ExpiryHours, Deviations.ExpOther, Deviations.Active, Deviations.[Forms]![DeviationSelectionForm]![cmbAircraft]
FROM Deviations
WHERE Deviations.[Forms]![DeviationSelectionForm]![cmbAircraft]=True
ORDER BY Deviations.Deviation DESC

组合框选择飞行器的尾号,它是表格中的一个复选框。有多个飞机尾号作为复选框字段。因此,如果没有组合框并且我希望将查询用作示例飞机 416,则查询将是:

SELECT Deviations.Deviation, Deviations.Rev, Deviations.Title, Deviations.Issued, Deviations.ExpiryDate, Deviations.ExpiryHours, Deviations.ExpOther, Deviations.Active, Deviations.[416]
FROM Deviations
WHERE Deviations.[416]=True
ORDER BY Deviations.Deviation DESC

当我测试这个查询时,它会按我的需要工作。

所以问题是我如何使用组合框以标识表的字段名称的形式创建查询?

【问题讨论】:

【参考方案1】:

在组合框 afterUpdate 事件中通过代码构建查询 SQL。

Dim strSql as String
strSql = "SELECT Deviations.Deviation, Deviations.Rev, Deviations.Title, Deviations.Issued, " _
& "Deviations.ExpiryDate, Deviations.ExpiryHours, Deviations.ExpOther, " _
& "Deviations.Active, Deviations." & Me!cmbAircraft _
& " FROM Deviations " _
& "WHERE Deviations." & Me!cmbAircraft & " =True " _
& "ORDER BY Deviations.Deviation DESC"
CurrentDb.QueryDefs(<yourqueryname>).SQL = strSql

也就是说,您似乎构建了一个电子表格而不是一个数据库。 您的表格未标准化。飞机应该是记录,而不是列。我建议您阅读数据库设计和规范化。

【讨论】:

感谢您的帮助,我相信这可能会奏效。至于数据库设计,我听到你在说什么,但不得不以这种方式构建它。我有一张带有飞机编号的表格,在这种情况下没有使用。我正在处理的表格基于可能适用于一架或多架不同飞机的飞机维护偏差,因此我在偏差表中为每架飞机提供了带有复选框的列。因此,当针对多架飞机发布偏差时,我输入偏差信息并选择它适用于哪架飞机。不过欢迎提出建议。 三张表: 1. Aircraft (AircraftID, ) 2. Deviations (DeviationID, ) 3. AircraftDeviations (AircraftID, DeviationID) 谢谢!现在正在阅读它。尚不完全确定如何在这种情况下实施它,但希望您的建议能引导我走向正确的方向。我的直觉很早就告诉我,我的数据库设计可能有缺陷。为此,你能建议我的偏差表格是什么样的吗?现在,我将每架飞机表示为偏差表上的一个复选框,每个复选框都填充基础表。这仍然合适还是应该是从飞机表创建的组合框/列表框?在这种情况下,如何填充 AircraftDeviations 表? 您当前带有复选框的结构不合适。正如我所概述的,您需要三个表。当您获得新飞机或偏差时,您不需要添加新字段。 Aircraft 表包含每架飞机的一条记录,Deviations 包含每个偏差的一条记录,AircraftDefiations 包含飞机加偏差的每种组合的一条记录。然后,您可以使用查询加入它们以查看哪些飞机有哪些偏差。 始终使用表单进行数据输入。在您的 Deviations 表单上,有一个子表单绑定到 AircraftDeviations,其组合框的行源是飞机。或者在飞机上形成一个绑定到 AircraftDeviations 的子表单,其组合框的行源是偏差。或两者。这一切都很基本。

以上是关于在 SQL 字段中使用 ComboBox 值的 MS 访问的主要内容,如果未能解决你的问题,请参考以下文章

Python + MySQL。如何将字段的 ID 从 ComboBox 传递到数据库?

C#Winform中怎样设置combox的默认值

C#WinForm中comboBox的DataSource获取数据是显示System.Data.DataRowView

easyUI中combobox的使用心得

使用 sql 查询更新 acf 字段值?

读取 SQL 表单元格值,仅更改 ComboBox.text 而不更改 ComboBox 集合项