- 締切済み
Access VBA Me.Requery レコードは削除されています エラー
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 -------------------------------- 途中で何かのプロパティが変化しているからでしょうか? 解決方法わかる方いらっしゃいますか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- yasuhiro1128
- ベストアンサー率0% (0/0)
[参考までに..] 1年前の質問に回答して良いものなのか、わかりませんが、自分も近い現象に何度か遭遇したことがありますので、そのときの解決方法を載せときます。 Me.Requery がなんらかの原因で使用できない場合は 以下の方法が有効となります。 ----------------------------- Dim strRS as String strRS = Me.RecordSource DoCmd.Echo False Me.RecordSource = "" <<各種クエリ操作>> Me.RecordSource = strRS DoCmd.Echo True ----------------------------
- nandarou-1011
- ベストアンサー率50% (65/128)
#1です。 結構複雑なことしていますね。こちらでも再現させてみようかと思いましたが、ちょっと断念しました。 ふとした思いつきなのですが、Me.requeryの代わりにMe.refreshでも駄目でしょうか。あるいはRefreshした後にRequeryではどうでしょうか。 簡単に試せるので試してみてください。
- ganners
- ベストアンサー率37% (3/8)
ついでに 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
- ベストアンサー率50% (65/128)
一つ質問です。 >確定済みの予約レコードは、削除します。 この場合、削除方法はどのような方法ですか?できれば確定ボタン_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 -----------------------------------------
補足
nandarou-1011さん、gannersさん、ありがとうございます。 下のような感じで、結構こみいってます。 予約テーブルからSELECT 確定テーブルからSELECT 確定テーブルに追加 予約テーブルからSELECT 詳細テーブルに追加 商品オプションテーブルからSELECT オプションテーブルに追加 ' 詳細処理終了で ★予約テーブルからDELETE ' 次の予約レコード(SELECTしたRecordset)を見る ' 全レコード(SELECTしたRecordset)終了(処理→削除)後、 Me.Requery ' <<<< 削除されていますエラー発生 ???なぜ(TT)???