我在我创建的表单上有一个小的查询构建器,允许用户保存他们构建的查询。效果很好!然后我意识到他们可以使用相同的名称保存多个查询。不好。我正在做的是当他们构建查询并选择保存它时,我只是将SQL字符串添加到一个字段中的表和他们选择的名称,在另一个字段中。很容易。所以现在我想我要做的就是搜索Name字段并根据用户选择的名称进行检查。我不知道为什么,但我似乎无法绕过它。我似乎无法让FindRecord工作。它返回一个布尔值吗?我不能只做这样的事情......
If DoCmd.FindRecord(userNameVariable) = True Then
msgbox("That name exists")
Else
msgbox(That name doesnt exist)
End If
现在我看一下,它没有给出任何查看位置,例如表格和字段名称。
答案 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