任何专家都可以告诉我为什么我总会收到这个错误"预期:结束声明"当我在Access VBA中运行以下代码时:
FNSQL = DoCmd.RunSQL _
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';"
提前非常感谢!
答案 0 :(得分:3)
您的代码有两种不同的错误。
你没有告诉我们FNSQL
是什么,所以人们只能想象。
@simoco提到,DoCmd.RunSQL
用于以下场景:
以下是API:DoCmd.RunSQL SQLStatement UseTransaction
SQLStatement :一个字符串表达式,它是操作查询或数据定义查询的有效SQL语句。它使用INSERT INTO,DELETE,SELECT ... INTO,UPDATE,CREATE TABLE,ALTER TABLE,DROP TABLE,CREATE INDEX或DROP INDEX语句。
如果要访问其他数据库,请包含IN子句。
<强> FNSQL
强>
我不确定您的目标是查询结果,但这是为了您的一般知识,因为如果您不了解RunSQL
语法,您可能不熟悉Recordsets
。
您可以将存储的查询结果分配给Recordset
并随意使用,就像表格一样。
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim SQL As String
Dim firstName As String
SQL = "SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = 1967;"
' OR
SQL = "SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';"
' You can write Debug.Print SQL to make sure you're getting the right SQL.
Set db = CurrentDb
Set rs = db.OpenRecordset(SQL)
' The disadvantage of this approach is that the query string must be compiled each time it runs
' OR
Set rs = db.OpenRecordset(YourSaveQueryName)
'This would be the faster method of the 2.
然后,您可以根据需要操作数据,并遍历整个记录集。
firstName = "Larry"
If rs.BOF And rs.EOF Then
' Do nothing, the recordset is empty
Else
Do Until rs.EOF
rs.Edit
rs!FirstName = firstName 'This is how you access properties in the recordset
rs.Update
rs.MoveNext
Loop
等
答案 1 :(得分:0)
我认为当你将SELECT语句传递给RunSQL
时,你需要使用圆括号,因为它被称为一个返回&#34;某些东西的函数。被分配到FNSQL
。所以像这样:
FNSQL = DoCmd.RunSQL( _
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';")
事实上,查看the RunSQL
documentation,RunSQL
并未返回任何内容,即使您修复了原始问题,您仍然会发现错误那里。
此外,根据文档,您只能使用SELECT ... INTO
执行RunSQL
语句。对于简单的SELECT ... FROM
语句,simoco是正确的 - 您需要使用Recordset
。
答案 2 :(得分:0)
2个错误。
首先,DoCmd.RunSQL不会对select做任何事情。也许你错过了你的行动(删除或其他东西)或者你想读它,所以你应该使用CurrentDb.OpenRecordset。您需要发布更多代码,以便我们更好地了解您的目标。
其次,如果Patient_ID是一个整数(我猜它是),你不需要'。你不需要;任
所以查询应该如下所示:
varInt = 1967
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = " & varInt
如果您不想对int使用var,只需将其直接插入字符串中,如下所示:
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = 1967"
如果Patient_ID是一个字符串,你确实需要',但你也缺少'在字符串周围,所以它应该是这样的:
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & "1967" & "'"
答案 3 :(得分:0)
这个问题不是一个正确的答案,但值得注意的是我只是想知道数据库中是否存在一行。我假设需要我编写某种选择或结果查询。但是,访问具有单独的功能,只是为了运行计数操作。
所以这段代码我最终得到了:
Dim count As Long
count = DCount("release_id", "list_releases", "list_id = 1 AND release_id = " & Me!release_id)
If count Then
Me!owned.Enabled = False
MsgBox "You own this release."
End If