1

我正在尝试设计一个简单的野生动物追踪数据库,这样当我或我的同事发现动物时,我们可以通过表格输入它的耳标号码。这将向我们显示之前观察到该动物的日期/位置的列表,或者如果它不在数据库中,则允许我们输入新的动物和位置。

我有两个主要数据表: dt_Animal - 存储有关该独特动物的耳标信息、物种和其他信息 dt_Sightings - 存储有关何时/何地看到动物的信息(以一对多关系链接到 dt_Animal,课程)

我想要的是当你打开表格时,你会得到一个框(文本或组合)来输入动物的耳标 ID。

  • 如果该 ID已经存在于数据库中,它会显示该动物的所有信息及其以前的目击记录 - 可选择填写任何缺失的信息并(当然)添加新的目击记录 - 它不会添加新的记录到 dt_Animal - 只记录到 dt_Sightings
  • 如果数据库中不存在ID ,它会在 dt_Animal 中创建一条新记录,并允许您输入任何/所有其他信息

我遇到的问题是我不希望 dt_Animal 中有重复的记录——每只动物都是独一无二的。

到目前为止,我已经知道,如果您输入的 eartagID 值已经存在于 dt_Animal 中,而不仅仅是弹出警告,该表单将在“Sightings”子表单中显示相关数据,因此您可以查看动物以前的位置并添加您的新目击。

任何帮助,将不胜感激!我一直在另一个论坛上获得一些帮助,直到帮助我的人在另一个线程上因争吵而被禁止...! http://www.access-programmers.co.uk/forums/showthread.php?p=1249087

谢谢!

4

1 回答 1

2

如果您还没有尝试过,我建议您使用Formfor Animals 使用标准文本框、组合框等来显示/编辑动物的详细信息,并使用链接Subform control来一次显示/编辑它们的目击,像这样:

子窗体示例.png

主表单绑定到 [dt_Animal],因此如果 [eartagID] 是主键(应该是),则不会冒在该表中创建重复项的风险。“Sightings”子表单绑定到 [dt_Sightings] 并通过 [eartagID]链接到 [dt_Animal],所以

  • 它只显示当前动物的目击记录

  • 如果您添加一个新的瞄准,它会自动将该瞄准链接到当前动物(即,自动插入正确的 [dt_Sightings].[eartagID])。

编辑

为了使搜索/添加动物更加“无缝”,一种方法是在表单标题中添加一个文本框txtAddSearch和一个命令按钮cmdAddSearch,并在表单后面使用以下代码:

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具有焦点:

OnLoad.png

您输入一个 EarTagID 并按 [Enter]。如果记录已经存在,那么您将被带到它...

杀手兔.png

...如果 EarTagID 尚不存在,您将被带到新记录(已填写该 EarTagID),因此您可以添加详细信息:

新记录.png

于 2013-04-19T18:56:45.437 回答