Проблема с RecordCount в MS-access 2010 VBA - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь понять, что я сделал неправильно в приведенном ниже фрагменте кода. Я читаю некоторые записи сеанса с указанным c идентификатором клиента и помещаю записи, возвращенные в LineGrid для дальнейшей обработки. Проблема со строкой NoL = Rs.RecordCount. Запрос возвращает несколько строк (я вижу это в среде разработки). Таким образом, в одном примере NoL присваивается значение 1, хотя Rs.Recordcount больше (3). Я могу проверить это непосредственно в среде отладки.

С риском утверждения очевидного, даже если количество записей равно 3, только одна строка вставляется в LineGrid

Dim Db As DAO.Database
Dim RsCL As DAO.Recordset 'ClientSession

Dim NoL As Integer
Dim LineGrid As Variant

Set RsCL = Db.OpenRecordset("Select * From ClientSession WHERE ClientID = " & CDID)
If RsCL.EOF Then
    MsgBox ("Nothing to Invoice")
    Exit Sub
    End If
'RsCL.MoveFirst
NoL = RsCL.RecordCount
LineGrid = RsCL.GetRows(NoL)
RsCL.Close

Я пытался

  1. Изменение типа данных NoL на Long - без эффекта
  2. Установка Rs.Count вместо (NoL) в свойстве GetRows - без эффекта
  3. Если я заменяю NoL значением, например 100, тогда код работает нормально, тогда все записи загружаются в LineGrid, но у меня нет точного количества записей.

  4. Я попытался переместить запись указатель со свойством .movefirst (вы заметите, что строка в настоящий момент закомментирована) - Нет эффекта

В конечном счете мне нужно, чтобы LineGrid содержал данные из таблицы и NoL, чтобы иметь истинное количество записей

1 Ответ

0 голосов
/ 02 апреля 2020

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

    RsCL.MoveLast
    RsCL.MoveFirst

С уважением,

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