vba中的sql语法错误以过滤组合框

Posted

技术标签:

【中文标题】vba中的sql语法错误以过滤组合框【英文标题】:sql syntax error in vba to filter a combobox 【发布时间】:2013-02-27 03:05:30 【问题描述】:

我需要根据当前记录[AllocID]的IDKey过滤一个combobox的可用选项

直接在组合框的 Rowsource 中尝试各种版本的 WHERE 子句未成功后,我遇到了一个解决方案,建议我在表单的 On Current 事件中设置 rowsource:

Private Sub Form_Current()
MSMgeID.RowSource = "SELECT[MSMge].[PrjID] ... FROM MSMge WHERE [PrjID] ='" & Me.AllocID & " '"
End Sub

[PrjID] 和 [AllocID] 都是 Long Integer 类型的数字字段,但我收到“标准表达式中的数据不匹配”。

我在我的 SQL 语法中所做的事情是否将其中一个字段混淆为文本?

【问题讨论】:

您收到的错误信息是什么? 我收到的错误消息是“标准表达式中的数据不匹配” 【参考方案1】:

试试这个:

MSMgeID.RowSource = "SELECT [MSMge].[PrjID] ... FROM MSMge WHERE [PrjID] =" & CStr(Me.AllocID) 

这里有一个解释:

正如 OP 所说,[MSMge].[PrjID] 和 Me.AllocID 都是数值。因此,我们需要使用CStr() 函数将VB 代码中的Me.AllocID 转换为字符串,而不是使用Where [PrjID] = '<some value>'(这将触发Access 中的类型不匹配错误)。上面的语句将被翻译成Where [PrjID] = <some numeric value>(注意我已经去掉了单撇号)

【讨论】:

有效!我不知道为什么,这是我想尝试的最后一件事,但它有效!我猜 [PrjID] 出于某种原因(即我的代码错误)被读取为文本,但无论如何,非常感谢。

以上是关于vba中的sql语法错误以过滤组合框的主要内容,如果未能解决你的问题,请参考以下文章

无法弄清楚这个语法错误 VBA SQL

sql的vba代码中''附近的语法不正确

Access 2010 中的 INSERT INTO 语句中出现 SQL 语法错误

Pyspark 数据帧过滤语法错误

在大型 VBA/MS Access 项目中查找语法错误

使用 FROM 子句中的子查询进行联接操作中的 SQL 语法错误