Как использовать SQL агрегатные функции с ADODB.Recordset? - PullRequest
0 голосов
/ 25 января 2020

В MS-Access 2019 я бы хотел получить количество номеров с 3 гостями из tblLink, например:

Dim rs As ADODB.Recordset, sSQL As String

sSQL = "SELECT Count(id) FROM tblLink WHERE bID=1 "
sSQL = sSQL & "GROUP BY rID HAVING Count(id)=3"

Set rs = New ADODB.Recordset

With rs

  Set .ActiveConnection = conn ' globally defined
  .CursorLocation = adUseClient
  .LockType = adLockReadOnly
  .Source = sSQL
  .Open    <---- Runtime Error

End With

... в результате

Ошибка выполнения 3265: элемент не найден в этой коллекции

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

Как я могу сделать эту работу в VBA с ADODB.Recordset?

Редактировать

tblLink:

id    bID    rID
-----------------
 1      3      2
 2      3      2
 3      3      2
 4      3      5
 5      3      5
 6      2      8

bID: идентификатор бронирования, rID: идентификатор номера

бронирование 3 имеет 2 комнаты, номер 2 занимают 3 человека, комната 5 2 человека.

Редактировать

tblLink связано с tblRoom и tblBooking ...

tblRoom                     tblBooking

id   name   type  etc.      id   start      end        status
long string string          long date       date       integer
----------------------      ---------------------------------
 2   A4       3B             3   1/28/2020  1/30/2020       1 
 5   B1       2B             2   1/24/2020  1/28/2020       1
 8   B4       1B


 tblRoom.id ---- tblLink.rID
                 tblLink.bID ---- tblBooking.id

Редактировать

conn определен в глобальном модуле и работает нормально:

Dim m_conn As ADODB.Connection

Public Function conn() As ADODB.Connection

  If m_conn Is Nothing Then Set m_conn = CurrentProject.AccessConnection
  Set conn = m_conn

End Function
...