访问VBA代码

时间:2014-07-29 18:49:07

标签: vba ms-access

任何专家都可以告诉我为什么我总会收到这个错误"预期:结束声明"当我在Access VBA中运行以下代码时:

FNSQL = DoCmd.RunSQL _
          "SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';"

提前非常感谢!

4 个答案:

答案 0 :(得分:3)

您的代码有两种不同的错误。

你没有告诉我们FNSQL是什么,所以人们只能想象。

错误#1

@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子句。

错误#2

<强> 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 documentationRunSQL并未返回任何内容,即使您修复了原始问题,您仍然会发现错误那里。

此外,根据文档,您只能使用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