Получение последнего значения в форме Microsoft Access на основе другого значения - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть форма, созданная для команды, чтобы регистрировать звонки, сделанные клиентам. У них может быть несколько звонков с одним и тем же клиентом, которому назначен уникальный идентификатор. Я построил форму, чтобы член команды мог выбрать идентификатор клиента в поле со списком, а затем с помощью VBA в несвязанных текстовых полях будут отображаться имя, номер телефона и адрес клиента (который хранится в демографической таблице клиента). Вся эта часть до сих пор работала просто отлично.

Моя проблема в том, что в моей форме есть текстовое поле, где члены команды могут вставлять заметки о звонке. Руководитель группы попросил меня сделать так, чтобы при выборе customerID это поле для заметок автоматически заполнялось заметками последнего звонка, и члены команды могли вводить add на дополнительных заметках. Так, например, в последнем звонке 4/1 заметки были "4/1 - говорил клиенту, заказ в пути", а сейчас 4/8, они звонят клиенту и хотят увидеть последние заметки , поле должно показать эту заметку от 4/1. Есть ли способ сделать это? Я попытался использовать опцию combo box, привязав это к combo box идентификатора клиента, но не могу заставить его работать. Спасибо!

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]

1 Ответ

1 голос
/ 23 апреля 2020

Ниже приведен некоторый код VBA, который получает последний набор заметок (с помощью TOP / ORDER BY DateCalled DESC) для текущего клиента, выбранный в поле со списком, где DateCalled не равен текущей дате вызова (показано в *). 1003 *):

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

Чтобы заполнить другие текстовые поля, основанные на таблице Customer, вы можете захотеть посмотреть на добавление столбцов в поле со списком с их ColumnWidth, установленным в 0 (чтобы пользователь не мог их видеть), а затем установите эти текстовые поля для использования скрытых столбцов.

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...