检查筛选表以获取特定数据

时间:2015-12-22 00:42:17

标签: ms-access access-vba

我有一个表单(frm_Property),它显示属性的信息,并在该表单中显示另一个表单(frm_Rate),它是一个过滤表,显示与该属性关联的所有费率。我想检查过滤的费率表,以确保没有输入费率或有当前费率(即当前日期介于费率的开始和结束日期之间)。如果没有当前费率(仅输入其他费率),我想停止关闭表格,并打开一个消息框,告诉用户输入当前费率。

在搜索并遵守许多不同的东西后,这是我目前的代码。

func fatal(err interface{}) {
     if v, ok := err.(string); ok {
         fmt.Println(v)
     }
     if v, ok := err.(error); ok {
          fmt.Println(v.Error())
     } else {
        // panic ?
     }
}

目前它可以检测是否没有输入记录,但它总是告诉我即使有记录也没有当前的费率,我不知道为什么。

我的代码也位于frm_rate中。我不知道这是不是因为我无法阻止表格关闭。我正在阅读关于卸载停止表单关闭的内容,这就是我选择那个的原因。我怀疑我遇到了麻烦,因为我的“On Unload”在子表单中。

非常感谢任何见解。

2 个答案:

答案 0 :(得分:1)

在卸载主窗体后发生子窗体的卸载事件,因此子窗体中的代码无用。在主窗体中,您需要先保存数据Me.Dirty = false在此之后,您的代码将能够在表格中查看新数据。您还可以使用子表单的RecordsetClone属性来访问子表单中的数据。

答案 1 :(得分:0)

使用子表单的RecordsetCloneFindFirst

Dim currdate As String
Set rs = Me!NameOfYourSubformCONTROL.Form.RecordsetClone

' Check to see if the recordset actually contains rows.
If rs.RecordCount = 0 Then
    check = "Empty"
Else
    ' Check if rate is current rate.
    currdate = Format(Date, "yyyy\/mm\/dd"
    rs.FindFirst "#" & currdate "# Between tbl_rate.Start_Date And tbl_rate.End_Date"
    If Not rs.NoMatch Then
        check = "Good"
    Else
        check = "Bad"
    End If
End If