2016-12-05 34 views
1

我希望這是一個簡單的問題的人。我有這種方法使用兩個表單字段來檢查我的表中是否存在記錄,並添加記錄或什麼都不做。因此,如果patient_id是100,visit_number是1,那麼如果它尚不存在,我將只添加一條新記錄。訪問,VBA:查找首先不能正常工作

因此,如果rst.NoMatch爲真 - 添加一條新記錄。但是,我無法讓它識別重複。這裏是代碼:

Private Sub add_record_button_Click() 
Dim rst As DAO.Recordset 
Set rst = Me.RecordsetClone 

Dim dbs As DAO.Database 
Set dbs = CurrentDb 


If IsNull(Form.patient_id) Or IsNull(Form.visit_number) = True Then 
    MsgBox "Please fill in both fields." 
Else 
    rst.FindFirst "[patient_id] = " & Form.patient_id & " And [visit_number] = " & Form.visit_number 

    If rst.NoMatch Then 

     Set rst = dbs.OpenRecordset("Visits") 
     rst.AddNew 
     rst!patient_id = Form.patient_id 
     rst!visit_number = Form.visit_number 
     rst.Update 
     MsgBox "New patient visit has been added to the database." 
    Else 
     MsgBox "That visit already exists." 
    End If 
    rst.Close 
End If 
End Sub 

我相信我的FindFirst行不正確。在數據庫中,變量名爲patient_id和visit_number。在形式上,他們被命名爲相同。

任何幫助,將不勝感激,謝謝。

編輯。

從下面的評論,我能夠得到我的邏輯工作,但使用不同的比較功能,Dlookup。

IsNull(DLookup("[patient_id]", "MyTable", "[patient_id] = " & Forms("MyForm").patient_id & " AND [visit_number] = " & Forms("MyForm").visit_number) 

FINAL EDIT。

如果我直接使用表單,但是如果我將表單放入導航表單 - 它停止工作,上面的行使所有工作都成功。從導航表單中最終得到它的字符串看起來像這樣:

If IsNull(DLookup("[patient_id]", "Visits", "[patient_id] = " & Me!patient_id.Value & " AND [visit_number] = " & Me!visit_number.Value)) = True Then 

謝謝大家的幫助。

+0

在DB patient_id數字字段? –

+0

@ A.S.H是的,我把它設置爲「數字」 –

+1

我沒有發現你的代碼有什麼問題。你的RecordsetClone是一個「表」記錄集嗎? –

回答

1

我從來沒有見過這樣使用Form,你應該能夠直接添加在表單中的記錄,所以嘗試:

Private Sub add_record_button_Click() 

Dim rst As DAO.Recordset 
Set rst = Me.RecordsetClone 

Dim PatientId As Variant 
Dim VisitNumber As Variant 

PatientId = Me!patient_id.Value 
VisitNumber = Me!visit_number.Value 

If IsNull(PatientId) Or IsNull(VisitNumber) Then 
    MsgBox "Please fill in both fields." 
Else 
    rst.FindFirst "[patient_id] = " & PatientId & " And [visit_number] = " & VisitNumber & ""  
    If rst.NoMatch Then 
     rst.AddNew 
      rst!patient_id.Value = PatientId 
      rst!visit_number.Value = VisitNumber 
     rst.Update 
     MsgBox "New patient visit has been added to the database." 
    Else 
     MsgBox "That visit already exists." 
     Me.Bookmark = rst.Bookmark 
    End If 
End If 

End Sub 
+0

這以一種奇怪的方式打破。對於第一個條目,從我第一次打開表單開始,它允許我輸入任何選項 - 即使我輸入了一個已存在的選項。但之後,它似乎注意到它現在是重複的,不會讓我再次輸入它。然後它也不會讓我在沒有關閉和重新打開表單的情況下更改表單字段。 –

+0

是的,您可能需要重新設計一點。我相信你混淆了數據輸入和數據搜索領域。 – Gustav