使用表单显示以前的条目并添加新条目

时间:2013-04-19 18:14:56

标签: ms-access access-vba

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

我有两个主要的数据表: dt_Animal - 存储有关该独特动物的耳标信息,种类和其他信息 dt_Sightings - 存储关于何时/何处看到动物的信息(当然,与一对多关系中的dt_Animal链接)

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

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

我遇到问题的地方是我不想在dt_Animal中重复记录 - 每只动物都是独一无二的。

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您还没有尝试过,我建议使用Form动物,使用标准文本框,组合框等来显示/编辑动物的详细信息使用链接的Subform control一次显示/编辑他们的目击,如下所示:

SubformExample.png

主窗体绑定到[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具有焦点:

OnLoad.png

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

KillerRabbit.png

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

NewRecord.png

相关问题