你如何在VBA中使用FindRecord方法?

时间:2012-09-28 17:13:40

标签: vba ms-access access-vba

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

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

现在我看一下,它没有给出任何查看位置,例如表格和字段名称。

3 个答案:

答案 0 :(得分:1)

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

一种方法是构建一个类似的SQL字符串 "SELECT [Name] FROM [Table] WHERE [Name] = '" & userNameVariable & "'", 执行Query,然后测试记录集是否为空。守则看起来像

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

答案 1 :(得分:0)

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

这就是我要做的事情(我不是说这是最好的方法,就像我要做的那样)。假设该表名为TblName,保存名称的字段为SQLName,则:

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

答案 2 :(得分:0)

保存的查询名称存储在不受支持的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