プロが教えるわが家の防犯対策術!

Me.Requery すると「レコードは削除されています」エラー

予約テーブル → 確定テーブルにデータ移し、予約テーブルのレコードは削除
という処理をしています。

予約詳細というクエリを作り、フォームで開きました。

[確定]ボタンを設置し、フォームの値を確定テーブルに追加できるようにしました。

確定済みの予約レコードは、削除します。

ここまでは成功したのですが、フォームには、確定済みの予約レコードが表示されたままです。

Me.Requery
というコードを追加しましたが、エラーになります。
「レコードは削除されています」エラーです。


単純に[削除]ボタンで1レコード削除した後、
Me.Requery
した場合には、問題なく、きれいに再表示されます。
--------------------------------
Private Sub 削除ボタン_Click()
Dim ADOcmd As ADODB.Command

Set ADOcmd = New ADODB.Command
ADOcmd.ActiveConnection = CurrentProject.Connection
ADOcmd.CommandText = "Delete from 予約 where 予約ID=" & me.予約ID
ADOcmd.Execute
Set ADOcmd = Nothing
Me.Requery ' <<<< これは成功します。gannersさん感謝<(_ _)>
End Sub
--------------------------------


途中で何かのプロパティが変化しているからでしょうか?
解決方法わかる方いらっしゃいますか?

A 回答 (4件)

一つ質問です。



>確定済みの予約レコードは、削除します。
この場合、削除方法はどのような方法ですか?できれば確定ボタン_Clickの内容を教えていただけますか。

この回答への補足

-----------------------------------------
Sub kakutei()

Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim rst2 As New ADODB.Recordset

''' DB接続
Set cnn = CurrentProject.Connection

''' 予約テーブルから、このユーザの最初の予約を取得
mySQL = "SELECT min(予約日) as 最少予約日 FROM 予約 WHERE uid=" & Me.uid
rst.Open mySQL, cnn, adOpenKeyset, adLockReadOnly
最少予約日 = rst!最少予約日
rst.Close

''' 確定テーブルの主キー生成
mySQL = "SELECT max(sid) as sid_max FROM 確定;"
rst.Open mySQL, cnn, adOpenKeyset, adLockReadOnly
sid = rst!sid_max + 1
rst.Close

'' 確定テーブルに追加
mySQL = "INSERT INTO 確定 (sid, 予約日, uid, 確定日) " _
& " VALUES( " & sid & ", #" & 最少予約日 & "#, " & uid & ", #" & Me.確定日 & "# ) ;"
cnn.Execute mySQL

''' このユーザの全予約レコードを取得
mySQL = "SELECT * FROM 予約 WHERE uid=" & Me.uid
rst.Open mySQL, cnn, adOpenKeyset, adLockReadOnly

Dim i As Integer
Do Until rst.EOF
cid = rst!cid
単価 = rst!単価
数量 = rst!数量
値引額 = rst!値引額

''' 詳細テーブルに追加
i = i + 1
scid = sid * 10 + i ' 詳細テーブルのシリアル番号生成
mySQL = "INSERT INTO 詳細 ( scid, sid, cid, 単価, 数量, 値引額 ) " _
& " VALUES( " & scid & ", " & sid & ", " & cid & ", " & 単価 & ", " & 数量 & ", " & 値引額 & ");" ' cidは商品コード
cnn.Execute mySQL

'' この商品のオプション内容登録
mySQL = "SELECT * FROM 商品オプション WHERE cid=" & cid
rst2.Open mySQL, cnn, adOpenKeyset, adLockReadOnly
Do Until rst2.EOF

''' オプションテーブルに追加
mySQL = "INSERT INTO オプション ( scid, ciid ) " _
& " VALUES( " & scid & ", " & ciid & ") ;"
cnn.Execute mySQL
rst2.MoveNext
Loop
rst2.Close

''' レコード削除
delete_rid Me.rid
rst.MoveNext
Loop
rst.Close

' Me.Requery ' <<<<<<<< ここでrequeryするとエラーになる

''' 終了処理
cnn.Close: Set cnn = Nothing
Set rst = Nothing

' Me.Requery ' <<<<<<<< ここでrequeryするとエラーになる

End Sub
-----------------------------------------

Private Sub delete_rid(rid)
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset

''' DB接続
Set cnn = CurrentProject.Connection

''' 予約テーブルからレコード削除
mySQL = "DELETE FROM 予約 WHERE rid=" & rid ' ridは予約ID
cnn.Execute mySQL

''' 終了処理
cnn.Close: Set cnn = Nothing
Set rst = Nothing

End Sub
-----------------------------------------

補足日時:2005/07/12 14:57
    • good
    • 0

ついでに



Private Sub 確定_Click()
Dim ADOcmd As ADODB.Command

Set ADOcmd = New ADODB.Command
ADOcmd.ActiveConnection = CurrentProject.Connection
ADOcmd.CommandText = "insert into 確定テーブル(X1,Y2,Z3) select A1,B2,C3 from 予約テーブル"
ADOcmd.Execute
ADOcmd.CommandText = "delete from 予約テーブル"
ADOcmd.Execute
Set ADOcmd = Nothing
Me.Requery
End Sub

上記であれば、動作確認済みです。現行のコードと見比べ違いを教えていただければ答えやすいです。

この回答への補足

nandarou-1011さん、gannersさん、ありがとうございます。

下のような感じで、結構こみいってます。

予約テーブルからSELECT
確定テーブルからSELECT
確定テーブルに追加
予約テーブルからSELECT
  詳細テーブルに追加
  商品オプションテーブルからSELECT
    オプションテーブルに追加
  ' 詳細処理終了で
  ★予約テーブルからDELETE
  ' 次の予約レコード(SELECTしたRecordset)を見る
' 全レコード(SELECTしたRecordset)終了(処理→削除)後、
Me.Requery ' <<<< 削除されていますエラー発生

???なぜ(TT)???

補足日時:2005/07/12 14:59
    • good
    • 0

#1です。



結構複雑なことしていますね。こちらでも再現させてみようかと思いましたが、ちょっと断念しました。

ふとした思いつきなのですが、Me.requeryの代わりにMe.refreshでも駄目でしょうか。あるいはRefreshした後にRequeryではどうでしょうか。

簡単に試せるので試してみてください。
    • good
    • 2

[参考までに..]


1年前の質問に回答して良いものなのか、わかりませんが、自分も近い現象に何度か遭遇したことがありますので、そのときの解決方法を載せときます。

Me.Requery がなんらかの原因で使用できない場合は
以下の方法が有効となります。

-----------------------------
Dim strRS as String

strRS = Me.RecordSource
DoCmd.Echo False
Me.RecordSource = ""

<<各種クエリ操作>>

Me.RecordSource = strRS
DoCmd.Echo True

----------------------------
    • good
    • 6

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A