0

私が作成したフォームに、ユーザーが作成したクエリを保存できる小さなクエリ ビルダーがあります。よく働く!その後、同じ名前を使用して複数のクエリを保存できることに気付きました。良くない。私がやっていることは、彼らがクエリを作成して保存することを選択したときです.SQL文字列をテーブルの1つのフィールドに追加し、選択した名前を別のフィールドに追加するだけです. 簡単です。これで、名前フィールドを検索して、ユーザーが選択した名前と照合するだけでよいことがわかりました。理由はわかりませんが、そのことに頭を悩ませているようです。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は、その基準で見つかった最初のレコードを返します。その名前がす​​でに存在するかどうかだけを確認したい場合は、必要なことを行うためのより良い方法があると思います。

1つの方法は、のような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 に答える