2016-12-05 41 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