2013-08-05 69 views
3

我是Access的新用戶,因此請在這裏與我聯繫。Access 2010 - 在添加新記錄之前檢查記錄集中的數據

我有一個表格,讓我新數據添加到一個表

ID | Name | City | Zip Code 
1 | John | Newark | 12340 
2 | Alex | Boston | 98760 

於是就等等...

在繼續添加新記錄與上述數據字段,我需要創建一個檢查表,查看錶以確定名稱,城市和郵編的組合是否已經存在。如果他們這樣做,我希望它退出小組;否則繼續與宏的其餘部分。

我一直在尋找這種使用某種形式的OpenRecordset命令,但我不知道從哪裏開始。有人能指引我朝着正確的方向嗎?謝謝!

+1

而不是編碼來檢查它。你可以使你想要的字段沒有複合鍵的重複。這將允許該特定條目僅輸入一次。 – ObieMD5

+0

這張表與其他實體有什麼關係? – ObieMD5

+0

感謝您的快速響應!該表僅通過名稱字段鏈接到其他人。我假設你的方法將能夠處理更多的字段以及更大的數據集?我希望能有最快的解決方案,因爲我認爲這可能會成爲一個更大的表格。再次感謝。 – nsjkd

回答

0

如果您想按照您的要求使用記錄集,那麼您將需要使用SQL語句來選擇全部或使用它來按名稱查找某些內容。

Dim myR as Recordset 
Dim strSQL as String 

'run a SQL statement to select a record with the same info 
strSQL = "SELECT [Name], [City], [Zip Code] FROM table_name_here " & _ 
     "WHERE [Name] = '" & form_control_name & "' " & _ 
     "AND [City] = '" & form_control_city & "' " & _ 
     "AND [Zip Code] = '" & form_control_zip & "'" 

'set your recordset to the SQL statment 
Set myR = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) 

'if your count is greater than 0, then you'll have a duplicate 
If myR.RecordCount > 0 then 
    MsgBox "This already exists" 
Else 
    MsgBox "All clear" 
End if 

Set myR = Nothing 
+0

謝謝。但是,當我嘗試運行此代碼時,它指向「myR =」作爲屬性的無效使用。 – nsjkd

+0

@nsjkd將其更改爲'Set myR = CurrentDb.OpenRecordset(strSQL,dbOpenDynaset)' – ObieMD5

+0

對不起,我也試過。它給我運行時錯誤'3061'太少參數。預計1. – nsjkd

1

我只是寫了這段代碼來重新創建你的情況,它工作正常。你只需要在查詢中重新命名你的列和你的表。

Dim strSQL As String 
Dim qdf As QueryDef 

'if these columns are not text change to approriate type 
strSQL = "PARAMETERS [NameToCheck] Text(255),[CityToCheck] Text(255),[Zip] Text(255); " 

'change table name and column names here 
strSQL = strSQL & "SELECT Count(*) FROM address " _ 
       & "WHERE FName = [NameToCheck] AND City = [CityToCheck] AND ZipCode = [Zip];" 

Set qdf = CurrentDb.CreateQueryDef("", strSQL) 
qdf("NameToCheck") = txtName.Value 'change to that textfield on form 
qdf("CityToCheck") = txtCity.Value 'change to that textfield on form 
qdf("Zip") = txtZipCode.Value 'change to that textfield on form 

If qdf.OpenRecordset(dbOpenSnapshot)(0) > 0 Then 
    MsgBox "This record is already in the database" 
Else 
    'Insert statement goes here. 
End If 
+1

+1我認爲用SELECT Count(*)... WHERE ...會更好......那麼你甚至不需要記錄集對象變量。這個計數可以用'qdf.OpenRecordset(dbOpenSnapshot)(0)' – HansUp

+1

@HansUp指出。代碼越嚴密越好。編輯代碼以實現這一點。 – ObieMD5

相關問題