Доступ: перейти к следующей записи до EOF - PullRequest
2 голосов
/ 15 июня 2011

Мне нужно перебрать форму, перейдя к следующей записи в наборе записей.

Я использую событие Form_Current для цикла. Я использовал пару утверждений и имею разные результаты.

Этот иногда дает сбой и выдает сообщение об ошибке: «Вы не можете перейти к указанной записи».

DoCmd.GoToRecord , , acNext

Это только идет до 72 записей и останавливается.

DoCmd.RunCommand acCmdRecordsGoToNext

Этот идет только до 129 записей и останавливается.

Me.Recordset.MoveNext

Попытка найти инструкцию, которая пойдет к следующей записи, пока не достигнет конца файла. Я использую Access 2010 (Access 2002-2003 формат файла mdb) в качестве внешнего интерфейса. Источник записей - это связанное представление SQL Server 2008.

Ответы [ 6 ]

8 голосов
/ 15 июня 2011

Цикл от текущей записи до конца:

While Me.CurrentRecord < Me.Recordset.RecordCount
    ' ... do something to current record
    ' ...

    DoCmd.GoToRecord Record:=acNext
Wend

Чтобы проверить, можно ли перейти к следующей записи:

If Me.CurrentRecord < Me.Recordset.RecordCount Then
    ' ...
End If
3 голосов
/ 16 июня 2011

Я делал это в прошлом и всегда использовал это:

  With Me.RecordsetClone
    .MoveFirst
    Do Until .EOF
      If Me.Dirty Then
         Me.Dirty = False
      End If
      .MoveNext
      Me.Bookmark = .Bookmark
    Loop
  End With

Некоторые люди используют набор записей формы, для которого не требуется установка закладки (т. Е. Навигация по набору записей формы формы).буфер формы редактируется автоматически, поэтому пользователь сразу видит движение), но я предпочитаю косвенное обращение к RecordsetClone.

3 голосов
/ 15 июня 2011
If (Not IsNull(Me.id.Value)) Then
DoCmd.GoToRecord , , acNext
End If

Привет, вам нужно указать это в форме активации и иметь поле id с именем id ...

, таким образом, оно проходит до тех пор, пока не достигнет поля без идентификатора (AKA new)...

2 голосов
/ 15 июня 2011
Set rs = me.RecordsetClone
rs.Bookmark = me.Bookmark
Do
    rs.movenext
Loop until rs.eof
0 голосов
/ 07 июня 2019

Если вы хотите, чтобы кнопки cmd циклически перебирали записи формы, попробуйте добавить этот код в cmdNext_Click и cmdPrevious_Click VBA. Я нашел, что это работает хорошо и справляется с проблемами BOF / EOF:

On Error Resume Next

DoCmd.GoToRecord , , acNext

On Error Goto 0


On Error Resume Next

DoCmd.GoToRecord , , acPrevious

On Error Goto 0

Удачи! PT

0 голосов
/ 20 октября 2016

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

Sub updatePrimaryKeysOnFormClose()
    Dim i, rcount As Integer
    'Declare some object variables
    Dim dbLib As Database
    Dim rsTable1 As Recordset
    'Set dbLib to the current database (i.e. LIBRARY)
    Set dbLib = CurrentDb
    'Open a recordset object for the Table1 table
    Set rsTable1 = dbLib.OpenRecordset("Table1")
    rcount = rsTable1.RecordCount
    '== Add New Record ============================  
        For i = 1 To rcount
              With rsTable1
                      rsTable1.Edit  
                      rsTable1.Fields(0) = i  
                      rsTable1.Update  
                      '-- Go to Next Record ---  
                      rsTable1.MoveNext
             End With  
        Next  
        Set rsTable1 = rsTable1
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...