Access Vba - Как установить текущую запись набора записей для другого набора записей - PullRequest
0 голосов
/ 17 ноября 2018

Я получаю набор записей

Do while not recset.eof 
Recset.movenext
Loop

и хочу установить текущую запись набора записей на другой набор записей с помощью vba

Set rec2 = rec1.????

Я пытался

Set.Rec2 = recset.bookmark

Но безуспешно!Я надеюсь, что есть способ легко установить текущую запись для другого набора записей

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Моей целью было экспортировать текущую запись набора записей в файл Excel.Как пишет Эрик, невозможно установить текущую запись для другого набора записей.

Но copyFromRecordset имеет очень интересные свойства для решения моей проблемы, как вы можете видеть ниже CopyFromRecordset RecordSet, MaxRows, MaxColumns Полное описание здесь

Итак, я протестировал этот код, и он прекрасно работает

    Dim oRecSet As Recordset, oRecSetClone As Recordset
    Dim varBookmark As Variant

    Set objExcelApp = New Excel.Application
    objExcelApp.Visible = True
    Set wb = objExcelApp.Workbooks.Open("G:\Access\test.xlsx")
    Set ws = wb.Sheets(1)


    sSQL = "SELECT * FROM tbl"
    Set oRecSet = CurrentDb.OpenRecordset(sSQL)
    Set oRecSetClone = oRecSet.Clone

    Do While Not oRecSet.EOF
        Debug.Print i
        oRecSetClone.Bookmark = oRecSet.Bookmark
        ws.Range("A" & i).CopyFromRecordset oRecSetClone, 1
        oRecSet.MoveNext
    Loop

End Sub

Только один комментарий

Я использую закладку, потому что заметил странное поведение, когда применяю rec copyFromRecordSet,1.После этой команды rec.movenext генерирует сообщение об ошибке: Nbr 3021 - нет текущей записи

0 голосов
/ 17 ноября 2018

Существует множество вариантов, но, не зная вашей точной цели, трудно понять, какая из них лучше для вас.

Один из вариантов - открыть набор записей:

Set rec2 = rec1.RecordsetClone 'Open a clone
rec2.Bookmark = rec1.Bookmark 'Move the clone to the same record

В этом случае rec2 содержит все данных, которые есть у rec1, но имеет ту же запись.

Другой вариант - использование фильтра:

rec1.Filter = "ID = " & rec1!ID 'Set a filter to the current record, assumes ID = primary key
Set rec2 = rec1.OpenRecordset 'Set rec2 to the filtered result, rec1 is still unfiltered
...