2012-09-28 151 views
0

我在創建的表單上有一個小的查詢生成器,它允許用戶保存它們生成的查詢。很棒!然後我意識到他們可以使用相同的名稱保存多個查詢。不好。我在做什麼是當他們構建查詢並選擇保存它時,我只是將SQL字符串添加到一個字段中的表中,並在另一個字段中將它們選擇的名稱添加到表中。很簡單。因此,現在我想要查找名稱字段並根據用戶選擇的名稱進行檢查。我不知道爲什麼,但我似乎無法繞過它。我似乎無法讓FindRecord工作。它返回一個布爾值嗎?我不能只是做這樣的事......如何在VBA中使用FindRecord方法?

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

現在,我看的是,它並沒有給任何地方看,如表和字段名。

回答

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 
+0

這就是美麗!我試試看。我不使用記錄集,很多時候,只是因爲我只是不知道如何,但我讀的越多,我看這似乎是做事情的最好方法。感謝您的幫助,其真誠讚賞。 – user1680893

0

根據msdn,它只是轉到您搜索的數據。我不認爲這是你需要的。

這裏就是我會做(我並不是說這是最好的方法,只是我會做什麼)。假設表被稱爲TblName和現場拿着保存的名稱是SQLName則:

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

很不錯的,我也會嘗試。我喜歡學習不同的方式來做些事情。謝謝! – user1680893

+0

很高興幫助。 @ kbsou的回答和我有效地做同樣的事情。我的結構更緊湊,但不一定可讀。 – PowerUser

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