2012-02-09 3 views
0

Использование 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. 

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

Как удалить первую запись, не удаляя ее первым?

EDIT: изучения записей далее в отладчик, когда я получаю сообщение об ошибке No current record, .BOF и .EOF оба Ложные, но .AbsolutePosition -1.

ответ

0

Ok.

После исчерпывающего поиска всего, что связано с 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

вы могли бы попробовать

Me.to_subform.Form.Recordset.MoveFirst 

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

Currentdb.execute "DELETE * FROM TheTable WHERE ContactId=" & contactId 
Me.from_subform.Form.Requery 
+0

Проблемы такого подхода заключается в том, что, когда я пытаюсь принести ContactId от выбранной записи в 'в' подчиненного с помощью: ' тусклого ContactId в long' 'ContactId = Me.to_subform.Form.RecordsetClone ContactId ' Я получаю ту же ошибку« Нет текущей записи ». – sigil

Смежные вопросы