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语法错误以过滤组合框的主要内容,如果未能解决你的问题,请参考以下文章