Заполнить список с помощью SQL

#sql #ms-access #vba

#sql #ms-access #vba

Вопрос:

Я застрял — я использую SQL и хочу, чтобы результаты были заполнены в списке. Я попробовал следующее:

 AdvisorOverall = "SELECT TOP 5 tbl_CallLogs.Advisor, Count(tbl_CallLogs.[Date Escalated]) AS [CountOfDate Escalated]" amp; _
                "FROM tbl_CallLogs" amp; _
                "GROUP BY tbl_CallLogs.Advisor" amp; _
                "HAVING (((tbl_CallLogs.Advisor) <> ""))" amp; _
                "ORDER BY Count(tbl_CallLogs.[Date Escalated]) DESC;"
  

Также пробовал:

 me.list3.rowsource = "SELECT TOP 5 tbl_CallLogs.Advisor, Count(tbl_CallLogs.[Date Escalated]) AS [CountOfDate Escalated]" amp; _
                "FROM tbl_CallLogs" amp; _
                "GROUP BY tbl_CallLogs.Advisor" amp; _
                "HAVING (((tbl_CallLogs.Advisor) <> ""))" amp; _
                "ORDER BY Count(tbl_CallLogs.[Date Escalated]) DESC;"
  

Также пробовал:

 me.list3.rowsource = AdvisorOverall
  

Каждое из вышеперечисленных не выдает ошибок, поэтому не уверен, где я ошибаюсь

Любая помощь приветствуется.

Комментарии:

1. Создайте запрос с помощью графического интерфейса пользователя (забудьте TOP 5 пока, все остальное выполнимо с помощью графического интерфейса пользователя). Посмотрите, какие результаты вы получите. После того, как он заработает в графическом интерфейсе, скопируйте и вставьте туда форму кода SQL и добавьте TOP 5

2. Кроме того, есть ли причина, по которой вы пытаетесь сделать это в VBA вместо назначения RouSource в режиме разработки? В VBA вам нужно будет перейти к Requery списку после настройки RowSource , прежде чем вы увидите какие-либо изменения.

Ответ №1:

У Мартина Грина есть несколько замечательных примеров подобных вещей.

 Private Sub UserForm_Initialize()
    On Error GoTo UserForm_Initialize_Err
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" amp; _
             "Data Source=C:DatabasesStaffDatabase.mdb"
    rst.Open "SELECT DISTINCT [Department] FROM tblStaff ORDER BY [Department];", _
             cnn, adOpenStatic
    rst.MoveFirst
    With Me.ComboBox1
        .Clear
        Do
            .AddItem rst![Department]
            rst.MoveNext
        Loop Until rst.EOF
    End With
UserForm_Initialize_Exit:
    On Error Resume Next
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
    Exit Sub
UserForm_Initialize_Err:
    MsgBox Err.Number amp; vbCrLf amp; Err.Description, vbCritical, "Error!"
    Resume UserForm_Initialize_Exit
End Sub
  

Посмотрите его сайт здесь.

http://www.fontstuff.com/vba/