Vba p>

Vba p>,vba,ms-access,Vba,Ms Access,您可以将存储的查询结果分配给记录集,并按照自己的意愿处理它,就像一个表一样 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

您可以将存储的查询结果分配给
记录集
,并按照自己的意愿处理它,就像一个表一样

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

等等。

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

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

错误#1 @simoco提到,
DoCmd.RunSQL
用于以下场景:

下面是API:
DoCmd.RunSQL语句useTransation

SQLStatement:一个字符串表达式,它是操作查询或数据定义查询的有效SQL语句。它使用INSERT INTO、DELETE、SELECT…INTO、UPDATE、CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE INDEX或DROP INDEX语句

如果要访问另一个数据库,请包含IN子句

错误2
FNSQL
我不确定您打算对查询结果做什么,但这是为了您的一般知识,因为如果您不知道
RunSQL
语法,您可能不熟悉
记录集

您可以将存储的查询结果分配给
记录集
,并按照自己的意愿处理它,就像一个表一样

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
等等。

2个错误

首先,DoCmd.RunSQL不会仅使用select命令执行任何操作。可能您缺少操作(删除或其他操作),或者您想阅读它,因此您应该使用CurrentDb.OpenRecordset。您需要发布更多的代码,以便我们能够更好地理解您将如何处理此问题

其次,如果Patient_ID是一个整数(我猜是),那么就不需要'。你不需要这个;要么

因此,查询应该如下所示:

FNSQL = DoCmd.RunSQL( _
          "SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';")
varInt = 1967
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = " & varInt
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & "1967" & "'"
如果不想对int使用var,只需将其直接插入字符串,如下所示:

"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = 1967"
如果Patient_ID是一个字符串,则您确实需要',但字符串周围也缺少',因此应如下所示:

FNSQL = DoCmd.RunSQL( _
          "SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';")
varInt = 1967
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = " & varInt
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & "1967" & "'"
2个错误

首先,DoCmd.RunSQL不能仅通过选择来执行任何操作。可能您缺少操作(删除或其他操作),或者您想阅读它,因此您应该使用CurrentDb.OpenRecordset。您需要发布更多代码,以便我们更好地了解您的操作方向

其次,如果Patient_ID是一个整数(我猜是),那么您不需要“.”也不需要“;也不需要

因此,查询应该如下所示:

FNSQL = DoCmd.RunSQL( _
          "SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';")
varInt = 1967
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = " & varInt
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & "1967" & "'"
如果不想对int使用var,只需将其直接插入字符串,如下所示:

"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = 1967"
如果Patient_ID是一个字符串,则您确实需要',但字符串周围也缺少',因此应如下所示:

FNSQL = DoCmd.RunSQL( _
          "SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';")
varInt = 1967
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = " & varInt
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & "1967" & "'"
2个错误

首先,DoCmd.RunSQL不会仅使用select命令执行任何操作。可能您缺少操作(删除或其他操作),或者您想阅读它,因此您应该使用CurrentDb.OpenRecordset。您需要发布更多的代码,以便我们能够更好地理解您将如何处理此问题

其次,如果Patient_ID是一个整数(我猜是),那么就不需要'。你不需要这个;要么

因此,查询应该如下所示:

FNSQL = DoCmd.RunSQL( _
          "SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';")
varInt = 1967
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = " & varInt
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & "1967" & "'"
如果不想对int使用var,只需将其直接插入字符串,如下所示:

"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = 1967"
如果Patient_ID是一个字符串,则您确实需要',但字符串周围也缺少',因此应如下所示:

FNSQL = DoCmd.RunSQL( _
          "SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';")
varInt = 1967
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = " & varInt
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & "1967" & "'"
2个错误

首先,DoCmd.RunSQL不能仅通过选择来执行任何操作。可能您缺少操作(删除或其他操作),或者您想阅读它,因此您应该使用CurrentDb.OpenRecordset。您需要发布更多代码,以便我们更好地了解您的操作方向

其次,如果Patient_ID是一个整数(我猜是),那么您不需要“.”也不需要“;也不需要

因此,查询应该如下所示:

FNSQL = DoCmd.RunSQL( _
          "SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & 1967 & "';")
varInt = 1967
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = " & varInt
"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = '" & "1967" & "'"
如果不想对int使用var,只需将其直接插入字符串,如下所示:

"SELECT First_Name FROM tblPatient_Info WHERE Patient_ID = 1967"
如果Patient_ID是一个字符串,则您确实需要',但字符串周围也缺少',因此应如下所示:

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

这不是对这个问题的正确答案,但值得注意的是,我只是想看看数据库中是否存在行。我认为这需要我编写某种select或result查询。但是access有一个单独的函数,仅用于运行计数操作

因此,我最终得到了以下代码:

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

这不是对这个问题的正确答案,但值得注意的是,我只是想看看数据库中是否存在行。我认为这需要我编写某种select或result查询。但是access有一个单独的函数,仅用于运行计数操作

因此,我最终得到了以下代码:

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

这不是对这个问题的正确答案,但值得注意的是,我只是想看看数据库中是否存在行。我认为这需要我编写某种select或result查询。但是access有一个单独的函数,仅用于运行计数操作

因此,我最终得到了以下代码:

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

这不是对这个问题的正确答案,但值得注意的是,我只是想看看数据库中是否存在行。我认为这需要我编写某种select或result查询。但是access有一个单独的函数,仅用于运行计数操作

因此,我最终得到了以下代码:

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

什么是
FNSQL
以及为什么要将其分配给
DoCmd.RunSQL
方法?
DoCmd.RunSQL
仅对操作查询(插入、删除、更新等)执行SQL语句。如果要执行
Select
query,请使用什么是
FNSQL
以及为什么要将其分配给
DoCmd.RunSQL
方法?
DoCmd.RunSQL
仅对操作查询(插入、删除、更新等)执行SQL语句。如果要执行
Select
query,请使用什么是
FNSQL
,以及为什么要分配