Попытка удалить подчиненную запись возвращает «Нет текущей записи» - PullRequest
0 голосов
/ 10 февраля 2012

Использование Access 2010. У меня есть две подчиненные формы from и to. У меня есть две кнопки в основной форме: addRecord, которая добавляет новую запись к to, используя значения из текущей выбранной записи from и из главной формы, и deleteRecord, которая удаляет текущий to выбранная запись.

Вот код для двух кнопок:

Private Sub addRecord_Click()

Dim contactid As Long
Dim requestid As Long
Dim startDate As Date

contactid = Me.from_subform.Controls("contactID").Value
requestid = Me.ID.Value
startDate = Me.startDate.Value

With Me.to_subform.Form.RecordsetClone
    .AddNew
    !AEid = contactid
    !requestid = requestid
    !startDate = startDate
    .Update
End With

Me.to_subform.Form.Requery
Me.from_subform.Form.Requery

End Sub

Private Sub deleteRecord_Click()

If Me.to_subform.Form.RecordsetClone.RecordCount = 0 Then
    Exit Sub
End If

Me.to_subform.Form.Recordset.Delete
Me.to_subform.Form.Recordset.MoveNext
Me.from_subform.Form.Requery


End Sub

from запрашивается, потому что некоторые из его полей зависят от того, есть ли соответствующая запись в to.

Проблема в том, что когда у меня есть одна запись в to, а затем я добавляю другую, используя addRecord, при попытке удалить первую запись с помощью deleteRecord я получаю следующую ошибку:

Run-time error '3021':
No current record.

Я могу выбрать любую другую запись в to, кроме первой, и удалить ее; также, если to пусто и я добавляю в него одну запись, то я могу удалить ее. И как только я удаляю другую запись в to, я могу выбрать эту первую и удалить ее.

Как я могу удалить эту первую запись без необходимости сначала удалять другую?

РЕДАКТИРОВАТЬ: проверка набора записей далее в отладчике, когда я получаю ошибку No current record, .BOF и .EOF оба имеют значение False, но .AbsolutePosition равно -1.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2012

Хорошо.

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

Private Sub deleteBtn_Click()

Dim db As dao.Database
Dim rs As Recordset
Dim id As Long

'test for an empty subform
Set rs = Me.to_subform.Form.RecordsetClone
If rs.RecordCount = 0 Then
    Exit Sub
End If


'test for no record selected (i.e. cursor is on the new record line)
If Not IsNull(Me.to_subform.Controls("id").Value) Then

    'get the ID value of the selected record
    id = Me.to_subform.Controls("id").Value

    'delete it from the source table
    Set db = CurrentDb
    db.Execute "delete * from toTable where id=" & id, dbFailOnError

    'refresh both forms
    Me.to_subform.Form.Requery
    Me.from_subform.Form.Requery
Else
    MsgBox "No record selected."
End If


End Sub

И это прекрасно работает.

0 голосов
/ 10 февраля 2012

вы можете попробовать

Me.to_subform.Form.Recordset.MoveFirst

Перед удалением, но могу ли я предложить, что более простой способ добавления и удаления записей - через SQL

Currentdb.execute "DELETE * FROM TheTable WHERE ContactId=" & contactId
Me.from_subform.Form.Requery
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...