【发布时间】:2020-02-17 15:11:15
【问题描述】:
我已经离开 Access 多年了,但我一直负责一个小型数据库功能。我需要做的是根据下拉结果创建一个查询,然后打开该查询,以便最终用户可以从中复制/粘贴他们想要的内容(或整个结果集)。
我的代码如下所示:
Private Sub btnSubmit_Click()
Dim X As String
Dim Y As String
Dim sSQL As String
Dim MyRs As Recordset
If IsNull(cboReportName.Value) Or IsNull(cboError.Value) Or cboReportName.Value = "" Or cboError.Value = "" Then
MsgBox "One or more of your selections is empty."
Exit Sub
End If
X = cboReportName.Column(2)
Y = cboError.Column(1)
sSQL = "Select * from " & X & " where Error = '" & Y & "'"
Set MyRs = CurrentDb.OpenRecordset(sSQL)
End Sub
我在 Set MyRS 行中遇到错误,它告诉我存在类型不匹配。这是否与 Access 如何使用短文本和长文本有关?查询中有 NULL 结果,这会抛出这个吗?任何想法都表示赞赏。
【问题讨论】:
-
报错时X和Y的内容是什么?您的查询很容易受到 SQL 注入和相关错误的影响,因此这很可能是原因。
-
这是一个 Intranet Access 应用程序,具有不可编辑的下拉菜单,并且没有机会编辑数据。如果有人想那么努力地弄乱 SQL 注入,他们就会失业。 sSQL 解析为 Select * from qryMED_CALC_IND_Errors where Error = 'MED_CALC_IND_ERROR'。 Error 是保留字吗?也许我需要更改该字段名称。
-
不,错误不是保留字(您可以仔细检查here)。您能否提供该查询的定义?我在多次查询其他查询时弹出错误,因此虽然该查询可以自行工作,但它仍然可能是原因。而且,只是检查一下,它是一个文本字段,对吗?
-
我不认为使用单词 Error 作为字段名称是问题,但它是 Access 中的一个特殊单词 allenbrowne.com/AppIssueBadWord.html
标签: sql vba ms-access ms-access-2013