我正在尝试设计一个简单的野生动物追踪数据库,以便当我或我的同事发现动物时,我们可以通过表格输入其耳标号码。这将要么向我们提供动物被观察到的先前日期/位置列表,或者如果它不在数据库中,请允许我们输入新的动物和位置。
我有两个主要的数据表: dt_Animal - 存储有关该独特动物的耳标信息,种类和其他信息 dt_Sightings - 存储关于何时/何处看到动物的信息(当然,与一对多关系中的dt_Animal链接)
我想要的是当你打开表格时,你会得到一个盒子(文字或组合)来输入动物的耳标ID。
我遇到问题的地方是我不想在dt_Animal中重复记录 - 每只动物都是独一无二的。
到目前为止,我已经知道如果您输入的eartagID值已经存在于dt_Animal中,而不是仅仅弹出警告,表单将在“Sightings”子窗体中显示相关数据,所以你可以看到动物以前的位置以及添加你的新目标。
任何帮助将不胜感激!我在另一个论坛上得到了一些帮助,直到帮助我的人被禁止在另一个线程上进行骚扰......! http://www.access-programmers.co.uk/forums/showthread.php?p=1249087
谢谢!
答案 0 :(得分:2)
如果您还没有尝试过,我建议使用Form
动物,使用标准文本框,组合框等来显示/编辑动物的详细信息和使用链接的Subform control
一次显示/编辑他们的目击,如下所示:
主窗体绑定到[dt_Animal],因此如果[eartagID]是主键(应该是主键),则不存在在该表中创建重复项的风险。 “瞄准”子表单通过[eartagID]绑定到[dt_Sightings]和链接到[dt_Animal],所以
它只显示当前动物的目击
如果你添加一个新的Sighting,它会自动将Sighting链接到当前的Animal(即自动插入正确的[dt_Sightings]。[eartagID])。
为了使搜索/添加动物更“无缝”,一种方法是在表单标题中添加一个文本框txtAddSearch
和一个命令按钮cmdAddSearch
,并在表单后面加上以下代码: / p>
Option Compare Database
Option Explicit
Private Sub cmdAddSearch_Click()
Dim rst As DAO.Recordset
If Not IsNull(Me.txtAddSearch.Value) Then
Set rst = Me.RecordsetClone
rst.FindFirst "eartagID=" & Me.txtAddSearch.Value
If rst.NoMatch Then
DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
Me.eartagID.SetFocus
Me.eartagID.Text = Me.txtAddSearch.Value
Me.species.SetFocus
Else
Me.Bookmark = rst.Bookmark
End If
Set rst = Nothing
End If
End Sub
Private Sub Form_Load()
Me.cmdAddSearch.Default = True
Me.txtAddSearch.SetFocus
End Sub
首次加载表单时,您正在查看第一个数据记录,但txtAddSearch
具有焦点:
您输入EarTagID并按[Enter]。如果记录已经存在,那么你将被带到它......
...如果EarTagID尚未存在,您将被带到一条新记录(已填写该EarTagID),因此您可以添加详细信息: