使用access vba计算sql查询结果中的行数

使用access vba计算sql查询结果中的行数,sql,ms-access,ms-access-2007,vba,Sql,Ms Access,Ms Access 2007,Vba,我正在尝试使用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 agen

我正在尝试使用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(参数太少)

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

strSQL=“从代理中选择一个[代理编号]作为”&vbCrLf&_
“其中,[机构编号]='”&Me.AGN.Value&'”
调试.打印strSQL
如果出现故障,请转到即时窗口,并从
Debug.Print
复制输出。然后可以在Access查询设计器中创建新查询,切换到SQL视图并粘贴到语句文本中进行测试

一旦
选择
起作用,就可以检查记录集是否为空。当它为空时,其
BOF
EOF
属性均为真。因此,要检测它何时不是空的,请检查是否有
not(BOF和EOF)

带rs的

如果不是(.BOF和.EOF),则
MsgBox“此值已存在”
如果结束
以
但是,您实际上不需要打开记录集来确定是否存在匹配行。您可以检查
DCount
表达式返回的值

Dim lng的长度与
lngrowth=DCount(“*”、“agencies”、“[agency no]=”、“&Me.AGN.Value&“”)
如果Ln大于0,则
MsgBox“此值已存在”
如果结束
注:

  • 我使用了
    AGN.Value
    而不是
    AGN.Text
    ,因为
    .Text
    属性只有在控件具有焦点时才可访问。但是我不知道你在哪里使用检查代码,所以不确定哪个是适合你的选择
  • 注意
    SELECT
    查询和
    DCount
    选项之间的相似性。在两者之间进行翻译通常很容易

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