根据另一个值在Microsoft Access表格中检索最近的值。

问题描述 投票:0回答:1

我为团队建立了一个表单,用于记录与客户的通话。 他们可能有多个电话,同一个客户都有一个独特的ID分配。 我建立了一个表单,使团队成员可以在组合框中选择一个客户ID,然后使用VBA,未绑定的文本框将显示客户的姓名、电话号码和地址(存储在客户人口统计表上)。 到目前为止,所有这部分工作都很顺利。

我的问题是,在我的表单上有一个文本框,团队成员可以在其中插入有关呼叫的注释。 团队负责人要求我把它改成当选择customerID时,备注框会自动弹出上一次通话的备注,团队成员可以输入添加更多的备注。 所以,比如在41号的最后一次通话中,备注是 "41号--与客户通话,订单在路上",现在是48号,他们在给客户打电话,想看最后的备注,框里应该显示41号的那个备注。 有什么办法可以做到这一点吗? 我试过使用组合框选项将此与客户ID组合框绑定,但不能完全让它工作。谢谢你!我有一个为团队建立的表单。

SELECT Notes,
   CustID FROM (SELECT Call1.CustID,
   Count(*) AS Rank,
   Call1.DateCalled, Call1.Notes FROM Call AS Call1 
INNER JOIN Call AS Call2 ON Call1.CustID = Call2.CustID 
WHERE ((Call2.DateCalled>=Call1.DateCalled)) 
GROUP BY Call1.CustID, Call1.DateCalled ORDER BY 1, 2)  WHERE Rank=1)  AS Call ON CustTable.CustID=Call.[CustID]
ms-access access-vba
1个回答
1
投票

下面是一些VBA代码,获得最后一组笔记(通过使用 TOPORDER BY DateCalled DESC)为当前客户选择的组合框,其中DateCalled不等于当前呼叫日期(显示在 txtDateCalled):

Private Sub Combo0_AfterUpdate()
    On Error GoTo E_Handle
    Dim db As DAO.Database
    Dim rsData As DAO.Recordset
    Dim strSQL As String
    Set db = DBEngine(0)(0)
    strSQL = "SELECT TOP 1 Notes " _
        & " FROM Call " _
        & " WHERE CustID=" & Me!Combo0 _
        & " AND DateCalled<>" & Format(txtDateCalled, "\#mm\/dd\/yyyy\#") _
        & " ORDER BY DateCalled DESC;"
    Set rsData = db.OpenRecordset(strSQL)
    If Not (rsData.BOF And rsData.EOF) Then
        Me!txtLastNotes = rsData!Notes
    Else
        Me!txtLastNotes = ""
    End If
sExit:
    On Error Resume Next
    rsData.Close
    Set rsData = Nothing
    Set db = Nothing
    Exit Sub
E_Handle:
    MsgBox Err.Description & vbCrLf & vbCrLf & "frmCall!Combo0_AfterUpdate", vbOKOnly + vbCritical, "Error: " & Err.Number
    Resume sExit
End Sub

为了填充其他基于客户表的文本框,您可能需要考虑在组合框中添加列,并将其ColumnWidth设置为0(这样用户就看不到它们),然后将这些文本框设置为使用隐藏列。

祝贺你。

© www.soinside.com 2019 - 2024. All rights reserved.