【问题标题】:How do you use the FindRecord method in VBA?如何在 VBA 中使用 FindRecord 方法?
【发布时间】:2014-06-15 23:31:23
【问题描述】:

我创建的表单上有一个小型查询构建器,允许用户保存他们构建的查询。效果很好!然后我意识到他们可以使用相同的名称保存多个查询。不好。我正在做的是当他们构建查询并选择保存它时,我只是将 SQL 字符串添加到一个字段中的表中,并在另一个字段中添加他们选择的名称。很容易。所以现在我想我要做的就是搜索名称字段并根据用户选择的名称检查它。我不知道为什么,但我似乎无法绕开它。我似乎无法让 FindRecord 工作。它返回一个布尔值吗?我就不能做这样的事吗……

If DoCmd.FindRecord(userNameVariable) = True Then
 msgbox("That name exists") 
Else
 msgbox(That name doesnt exist)
End If

现在我看了一下,它没有给出任何可以看的地方,例如表和字段名称。

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    DoCmd.FindRecord 返回使用该条件找到的第一条记录。如果您只想检查该名称是否已经存在,我认为有更好的方法来满足您的需求。

    一种方法是构建一个 SQL 字符串,例如 "SELECT [Name] FROM [Table] WHERE [Name] = '" & userNameVariable & "'", 执行查询,然后测试记录集是否为空。代码看起来像

    Dim rs as recordset
    Dim strSQL as string
    strSQL = "SELECT [Name] FROM [Table] WHERE [Name] = '" & userNameVariable & "'"
    Set rs = CurrentDb.OpenRecordset(strSQL)
    If rs.RecordCount > 0 Then 
       msgbox "This Query name already exists, please select another" 
    End If
    

    【讨论】:

    • 太美了!生病试一试。我不经常使用记录集,只是因为我不知道如何使用,但是我阅读的越多,我就越发现它似乎是最好的做事方式。感谢您的帮助,非常感谢。
    【解决方案2】:

    根据msdn,它只是转到您搜索的数据。我认为这不是你需要的。

    这就是我会做的(我并不是说这是最好的方法,只是我会做的)。假设表名为TblName,保存名称的字段为SQLName,则:

    If CurrentDb.OpenRecordset( _
        "Select count(*) from TblName where SQLName='" & SQLName & "';") _
        .Fields(0) > 0 Then
        'Do Something
    End If
    

    【讨论】:

    • 很好,我也试试这个。我喜欢学习不同的方法来做某事。谢谢!
    • 很高兴为您提供帮助。 @kbsou 的回答和我的回答有效地做同样的事情。我的更紧凑,但不一定具有可读性。
    【解决方案3】:

    已保存的查询名称存储在不受支持的 MSysObjects 表中,因此您可以在本地数据库中查找该表以查找查询是否存在:

    If IsNull(DLookup("name", "msysobjects", "name='" _
        & qryname & "' and type=5")) Then
    
        Set qdf = CurrentDb.CreateQueryDef(qryname, sSQL)
    Else
       MsgBox qryname " already exists."
    End If
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 2017-08-20
      • 2018-05-21
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      相关资源
      最近更新 更多