SQL-запрос в Excel VBA макрос не отображает агрегированную функцию? - PullRequest
0 голосов
/ 06 декабря 2018

При запуске кода SQL для выбора имени и суммы (политики) все работает нормально, как и ожидалось (а).

Однако при добавлении кода, имени и суммы (политики),политики не появляются!(б).

Что я делаю не так и как мне заставить это работать?

a.Работает:

Sub Macro1()
Dim cn As Object
Dim rs As Object
Dim sql As String
Dim strConnection As String

Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
 "Data Source=C:\Users\gorny\OneDrive\Documents\Brown Brothers    Harriman\Macros\VBA Data.accdb;"

cn.Open strConnection

 sql = "SELECT Name, Sum([Policy Count]) As Policies" & _
    " FROM Profiles " & _
    " GROUP BY Name " & _
    " Having Count([# of Families - All Forms])>1 " & _
    " Order By Name Asc"

Set rs = cn.Execute(sql)

Do Until rs.EOF
Debug.Print rs.Fields(0); " "; CStr(rs.Fields(1))
rs.MoveNext
Loop

End Sub

Результат, как и ожидалось:

Adam Miller Agency, LLC 11

Gary Gorny Agency, LLC 80

Irina Gornaya Agency 313

Ovsey Dybner Agency 157

Thomas Edison Agency 225

Wonderful Agency 23

(b) Добавление кода исключает сумму полисов!Почему и как это исправить?

Sub Macro1()
Dim cn As Object
Dim rs As Object
Dim sql As String
Dim strConnection As String

Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
 "Data Source=C:\Users\gorny\OneDrive\Documents\Brown Brothers    Harriman\Macros\VBA Data.accdb;"

cn.Open strConnection

 sql = "SELECT Code, Name, Sum([Policy Count]) As Policies" & _
    " FROM Profiles " & _
    " GROUP BY Code, Name " & _
    " Having Count([# of Families - All Forms])>1 " & _
    " Order By Name Asc"

Set rs = cn.Execute(sql)

Do Until rs.EOF
Debug.Print rs.Fields(0); " "; CStr(rs.Fields(1))
rs.MoveNext
Loop

End Sub

Где моя сумма полисов?

5000076 Adam Miller Agency, LLC

5000077 Gary Gorny Agency, LLC

5000078 Irina Gornaya Agency

5000079 Ovsey Dybner Agency

5000080 Thomas Edison Agency

5000081 Wonderful Agency

1 Ответ

0 голосов
/ 07 декабря 2018

Зацикливание полей набора записей гарантирует, что вы всегда печатаете все значения.Альтернативно, Recordset.getString возвращает строку всех записей.

Debug.Print "Print Recordset Column Headers And Values"
Dim c As Long
For c = 0 To rs.Fields.count - 1
    Debug.Print rs.Fields(c).Name,
Next

Do Until rs.EOF
    Debug.Print
    Debug.Print String(50, "-")
    For c = 0 To rs.Fields.count - 1
        Debug.Print rs.Fields(c).value,
    Next

    rs.MoveNext
Loop

rs.MoveFirst
Debug.Print String(5, vbNewLine)
Debug.Print "Use getString to Print Recordset Values"
Debug.Print String(50, "-")
Debug.Print rs.getString

Результаты

enter image description here

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