【问题标题】:count the number of rows in sql query result using access vba使用access vba计算sql查询结果中的行数
【发布时间】:2014-04-21 07:38:20
【问题描述】:

我正在尝试使用 access 2007 vba 计算 sql 查询结果中的行数。 我拥有的是一个名为AGN 的文本框,当用户在其上输入值时检查该值,然后如果该值已插入,则返回MsgBox。我尝试做的是:

Dim rs As DAO.Recordset
 Dim db As Database
  Dim strSQL As String

  Set db = CurrentDb

 strSQL = "SELECT agencies.[agency no] FROM agencies WHERE agencies.[agency no]= " &Me.AGN.Text

  Set rs = db.OpenRecordset(strSQL)

If rs.Fields.Count > 1 Then


MsgBox "this value is already here "

  End If

   Set rs = Nothing   

当我在文本框上插入任何值时,出现运行时错误 3061(参数太少)

【问题讨论】:

  • [agency no] 列是数字类型,我想要它的任务是检查查询是否返回任何行

标签: sql ms-access ms-access-2007 vba


【解决方案1】:

“参数太少” 错误消息通常表示您的 SQL 语句中存在 Access 无法识别为字段、表、函数或 SQL 关键字的内容。在这种情况下,如果[agency no] 是文本而不是数字数据类型,则可能会发生这种情况。如果是这种情况,请在构建 SQL 语句时用引号将 AGN 的值括起来。 (或者您可以使用参数查询来避免引用文本值。)

strSQL = "SELECT a.[agency no] FROM agencies AS a" & vbCrLf & _
    "WHERE a.[agency no]= '" & Me.AGN.Value & "'"
Debug.Print strSQL

如果遇到问题,请转到“立即”窗口并从Debug.Print 复制输出。然后您可以在 Access 查询设计器中创建一个新查询,切换到 SQL 视图并粘贴到语句文本中进行测试。

一旦您的SELECT 工作,您可以检查记录集是否为空。当它为空时,其BOFEOF 属性都为真。所以要检测它何时为空,检查Not (BOF And EOF) ...

With rs
    If Not (.BOF And .EOF) Then
        MsgBox "this value is already here "
    End If
End With

但是,您实际上并不需要打开记录集来确定是否存在匹配行。您可以检查 DCount 表达式返回的值。

Dim lngRows As Long
lngRows = DCount("*", "agencies", "[agency no]='" & Me.AGN.Value & "'")
If lngRows > 0 Then
    MsgBox "this value is already here "
End If

注意事项:

  1. 我使用AGN.Value 而不是AGN.Text,因为.Text 属性只有在控件具有焦点时才能访问。但我不知道您在哪里使用该检查代码,因此不确定哪个是适合您的选择。
  2. 注意SELECT 查询和DCount 选项之间的相似之处。两者之间的转换通常很容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    相关资源
    最近更新 更多