我希望这是一个简单的问题的人。我有这种方法使用两个表单字段来检查我的表中是否存在记录,并添加记录或什么都不做。因此,如果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
谢谢大家的帮助。
在DB patient_id数字字段? –
@ A.S.H是的,我把它设置为“数字” –
我没有发现你的代码有什么问题。你的RecordsetClone是一个“表”记录集吗? –