0

使用 Access 2007。

我必须将几个数据输入字段与其相应的表格字段进行比较。如果字段匹配,则不要添加新记录。如果没有,请添加包含这些值的新记录。

AnimalInfo Table fields
WHno (Wildlife Health Number)
Species
LETClr1 (Left Ear Tag Color 1)
LETNo1 (Left Ear Tag Number 1)
LETClr2 (Left Ear Tag Color 2)
LETNo2 (Left Ear Tag Number 2)
RETClr1 (Right Ear Tag Color 1)
RETNo1 (Right Ear Tag Number 1)
RETClr2 (Right Ear Tag Color 2)
RETNo2 (Right Ear Tag Number 2)

Form F_HotelForm unbound fields
txtSpecies
txtLETClr1 
txtLETNo1 
txtLETClr2
txtLETNo2
txtRETClr1
txtRETNo1
txtRETClr2
txtRETNo2

我正在尝试创建一个 DCount 来检查是否有任何匹配的记录。动物的独特性取决于其物种和耳标信息。它可以有一个耳标编号和颜色,也可以有四个。(一些旧数据没有,但我对此无能为力!在这种情况下,将生成一条新记录,即新的野生动物健康编号)

这就是我想用这个表格完成的:

如果没有匹配的字段 (DCount = 0),则添加新记录并将表单中的字段更新到表中。

如果有 1 条匹配记录,则显示动物的野生动物健康编号(最终以新形式显示)

如果有多个记录,则这些记录以另一种形式显示,用户需要选择正确的动物。

LETClr1 和 LETNo1 是配对的。

LETClr2 和 LETNo2 是配对的。

RETClr1 和 RETNo1 是配对的。

RETClr2 和 RETNo2 是配对的。

任何和所有这些字段都可以有值,也可以没有。左耳标签编号和颜色可以作为 LETClr1 或 LETClr2 输入,因此我必须将 LETClr1 和 LETClr2 与 txtLETClr1 数据条目进行比较。(这适用于所有配对字段)

以下是到目前为止的脚本示例。这是非常初级的,因为我对此很陌生,只是想看看什么是有效的。

Private Sub GenerateWHno_Click()
Dim rs As DAO.Recordset

If IsNull(Forms!F_HotelEntry!txtSpecies) Or (Forms!F_HotelEntry!txtSpecies) = "" Then
    MsgBox "Species is a required field. Please enter a species"
    Exit Sub

End If


MsgBox txtSpecies
SpeciesCount = DCount("[Species]", "AnimalInfo", "[Species]= '" & txtSpecies & "'AND [L_ET_Color1]='" & txtL_ET_Color1 & "' AND [L_ET_No1]='" & txtL_ET_No1 & "'")
    If SpeciesCount > 1 Then
        MsgBox SpeciesCount & " Greater than 1"
    ElseIf SpeciesCount = 0 Then
        MsgBox "You need a new WHno"

        WHno = Nz(DMax("WHno", "AnimalInfo")) + 1
        MsgBox WHno

        Set rs = CurrentDb.OpenRecordset("AnimalInfo")
            rs.AddNew
            rs!WHno = WHno
            rs!Species = txtSpecies
            rs!L_ET_Color1 = txtL_ET_Color1
            rs!L_ET_No1 = txtL_ET_No1
            rs!R_ET_Color2 = txtR_ET_Color2
            rs.Update
            rs.Close
    Else

    End If
    Forms!F_HotelEntry!txtSpecies = ""
    Forms!F_HotelEntry!txtL_ET_Color1 = ""
    Forms!F_HotelEntry!txtL_ET_No1 = ""
End Sub

所以问题是我不能连接 NULL 字段。DCount 仅在表单/表中有非 Null 数据时才有效。

关于如何解决这个问题的任何想法?

非常感谢。

我的评论越来越乱,所以我把原始帖子放在下面。

我将建议的代码复制到模块中并用几种不同的方式重写了查询,但仍然收到错误消息:运行时错误 424。需要对象

SpeciesCount = DCount("[Species]", "AnimalInfo", "[Species] = txtSpecies AND (is_null([L_ET_Color1],"""") = is_null(txtL_ET_Color1,""""))")

SpeciesCount = DCount("[Species]", "AnimalInfo", "[Species] = '" & txtSpecies & "'AND is_null([L_ET_Color1],"") ='" & is_null(txtL_ET_Color1, "") & "' AND [L_ET_No1]='" & txtL_ET_No1 & "'")

我已经修补了 3 个小时,但离解决方案还差得远。我究竟做错了什么?

4

1 回答 1

0

在模块中创建以下函数:

public function is_null(ctl as variant, nullreplace as string) as variant
    if ctl is null then
        is_null = nullreplace
    else
        is_null = ctl
    end if
end function

在您的查询中,将您对给定字段的引用更改为 is_null(yourField, "")。

在用双引号括起来的字符串中,这需要是 is_null(yourField, """") (它需要一个双引号来转义双引号,所以 4 在内部是 2)

于 2013-11-05T03:39:19.947 回答