如何使用 DoCmd.RunSQL
Posted
技术标签:
【中文标题】如何使用 DoCmd.RunSQL【英文标题】:How to use DoCmd.RunSQL 【发布时间】:2020-11-03 16:34:37 【问题描述】:我确信这是一个简单的解决方法,但我是 VBA 编码的新手。
我正在尝试建立一个具有简单目的的 MS Access 数据库。我的目标是让用户点击“查询_______”按钮,(空白部分是零件号或库存号)然后让他们在框中输入他们的信息并选择飞机平台。我已经弄清楚了那部分,但我在编写实际查询时遇到了麻烦。
我有两个名为“MV-22”和“CH-53E”的表。我有一个主表单,用户可以通过零件号或库存号选择他们想要的查询。一旦他们选择了一个,它就会分别为零件号或库存号打开另一个表格。然后他们输入他们想要查询的信息并从下拉菜单中选择表格(飞机平台)。从那里,我试图让它跨越到他们选择的任何表格,并拉取用户输入。
希望这是有道理的。这是我必须运行查询的代码。它一直在说“编译错误:预期:列表分隔符或)。”就像我说的那样,我确定这是一个简单的修复,我对这一切都是新手.. 感谢您的所有帮助!
Private Sub btnView_Click()
Dim PN As String
Dim TMS As String
PN = [frmSheetsPN]![txtbxPN]![Text]
TMS = [frmSheetsPN]![dropTMS]![Text]
DoCmd.RunSQL ("SELECT * FROM" '&TMS&' "WHERE PartNo LIKE" '&PN&')
End Sub
【问题讨论】:
什么是frmSheetsPN
?如果是表单名称,请遵循正确的标识符。看到这个tutorial。
除此之外,由于连字符的特殊字符,这些(“MV-22”和“CH-53E”)不仅不推荐在数据库中使用表名,而且它们可能不应该是单独的表,因为它们表示特定的部分。考虑使用 单个 零件表,其指示列包含“MV-22”、“CH-53E”等值。
您好,所以我已将所有内容合并到一个表中,并附加一列来识别飞机。现在我需要如何调整只有一张表的 SQL 查询?这是我现在拥有的:PN = frmSheetsPN.txtbxPN.Value TMS = frmSheetsPN.dropTMS.Value DoCmd.OpenQuery "SELECT * FROM [" & TMS & "] WHERE PartNo LIKE '%" & PN & "%'"
【参考方案1】:
您的尝试出现了几个问题:
不要将DoCmd.RunSQL
用于返回结果集的查询。此方法保留用于不返回任何数据的操作查询(INSERT
、UPDATE
、DELETE
)。相反,请使用已保存的查询,然后调用 DoCmd.OpenQuery
将查询打开到屏幕。
如前所述,请避免为每个数据元素使用单独的表格,这些表格的名称带有特殊字符,例如需要括号或反引号转义的连字符。相反,将所有相关数据存储到带有指示符列的单个表中。
对于LIKE
表达式,MS Access GUI (.EXE) 使用星号通配符*
,而不是%
。但是,您可以将ALIKE
与%
一起使用。
利用参数化并避免连接值。在 MS Access GUI 中,SQL 查询可以直接引用打开的表单上的表单控件。
避免SELECT * FROM 并控制列的数量和顺序显示。
总而言之,考虑以下设置:
SQL (另存为 Access 保存的查询对象)
SELECT Col1, Col2, Col3, ...
FROM myAircraftsTable
WHERE aircraft_type = Forms![frmSheetsPN]![dropTMS]
AND PartNo ALIKE '%' & Forms![frmSheetsPN]![txtbxPN] & '%'
VBA (参考上面保存的查询)
Private Sub btnView_Click()
DoCmd.OpenQuery "mySavedQuery"
End Sub
【讨论】:
以上是关于如何使用 DoCmd.RunSQL的主要内容,如果未能解决你的问题,请参考以下文章
将 DoCmd.RunSQL 用于 INSERT 和 DELETE 时删除确认
MS Access currentdb.excute 的结果与 Docmd.RunSQL 不同
docmd.runsql ("从 &strValue& 中删除 *")