Настройки набора записей DAO для чтения - PullRequest
0 голосов
/ 14 мая 2019

У меня есть база данных, из которой я создаю множество файлов Excel через набор записей DAO + CopyFromRecordset. Есть странная ошибка, когда команда CopyFromRecordset иногда выдает ошибку, но если я просто нажимаю «Продолжить» в отладчике, она продолжается без проблем. Это напомнило мне, что мне нужно настроить параметры для OpenRecordset - но как?

Что я делаю, это запрашиваю различные части таблицы и помещаю запрашиваемую часть в файл Excel. Набор записей только для чтения.

Итак, RecordsetTypeEnum - это dbOpenSnapshot, это ясно.

RecordsetOptionEnum? Я использую dbFailOnError, когда хочу читать / писать, но в этом случае нет смысла. Имеет ли смысл dbRunAsync, поскольку я запрашиваю одну и ту же таблицу несколько раз в относительно быстрой последовательности? Любой другой параметр, который полезен?

LockTypeEnum? Есть ли разница при использовании снимка?

Я не смог найти хорошее исчерпывающее описание этих настроек.

Мой код ниже, не слишком уместен:

  Set MyDb = CurrentDb

  Set rsGLAP = MyDb.OpenRecordset("SELECT DISTINCT GL_Account FROM APCommentedData WHERE CoCode = """ & CoCd & """;", dbOpenSnapshot)
  If Not (rsGLAP.BOF And rsGLAP.EOF) Then

    rsGLAP.MoveFirst
    Do Until rsGLAP.EOF

      Set wsAccount = wb.worksheets.Add
      wsAccount.Name = rsGLAP.Fields(0).Value

      Set rs1 = MyDb.OpenRecordset("SELECT * FROM APCommentedData WHERE CoCode = """ & CoCd & """ AND GL_Account = """ & rsGLAP.Fields(0).Value & """;",dbOpenSnapshot)

      'headers
      For i = 0 To rs1.Fields.Count - 1
        wsAccount.cells(33, i + 1).Value = rs1.Fields(i).Name
      Next

      'data
        wsAccount.cells(34, 1).copyfromrecordset rs1

      rs1.Close
      Set rs1 = Nothing
      rsGLAP.MoveNext
    Loop
...