0

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

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

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

4

3 回答 3

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
于 2012-09-28T17:41:48.473 回答
0

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

这就是我要做的(我不是说这是最好的方法,只是我会做的)。假设调用了表TblName并且保存保存名称的字段是SQLName

If CurrentDb.OpenRecordset( _
    "Select count(*) from TblName where SQLName='" & SQLName & "';") _
    .Fields(0) > 0 Then
    'Do Something
End If
于 2012-09-28T17:46:03.940 回答
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
于 2012-09-28T21:59:38.777 回答