2012-02-09 8 views
0

Access 2010を使用しています。fromtoの2つのサブフォームがあります。メインフォームにはaddRecordという2つのボタンがあり、fromの現在選択されているレコードとメインフォームからの値を使ってtoに新しいレコードを追加します。deleteRecordtoの現在選択されているレコードを削除します。そのフィールドの一部が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が再クエリます:ここで

2つのボタンのコードです。

問題は、私はtoで一つのレコードを持っている場合ということです、そして、私は私がdeleteRecordとの最初のレコードを削除しようとすると、私は次のエラーを取得する、addRecordを使用して別のものを追加します。私は

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

最初のもの以外にtoの他のレコードを選択して削除することができます。また、toが空で、それに単一のレコードを追加すると、それを削除できます。そして、私がtoの別のレコードを削除すると、その最初のレコードを選択して削除することができます。

最初に他のレコードを削除しなくても、最初のレコードを削除するにはどうすればよいですか?

編集:私はNo current recordエラーを取得する場合、デバッガでさらにレコードを調べ、.BOF.EOFは両方ともFalseのですが、.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

このアプローチの問題は、私が使用して 'to'サブフォームで選択したレコードからcontactIDを取得しようとすることです: ' long'としてcontactIDを暗く 'contactID = Me.to_subform.Form.RecordsetClone contactID! ' 「現在のレコードがありません」というエラーが表示されます。 – sigil

関連する問題