
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件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
[参考までに..]
1年前の質問に回答して良いものなのか、わかりませんが、自分も近い現象に何度か遭遇したことがありますので、そのときの解決方法を載せときます。
Me.Requery がなんらかの原因で使用できない場合は
以下の方法が有効となります。
-----------------------------
Dim strRS as String
strRS = Me.RecordSource
DoCmd.Echo False
Me.RecordSource = ""
<<各種クエリ操作>>
Me.RecordSource = strRS
DoCmd.Echo True
----------------------------
No.3
- 回答日時:
#1です。
結構複雑なことしていますね。こちらでも再現させてみようかと思いましたが、ちょっと断念しました。
ふとした思いつきなのですが、Me.requeryの代わりにMe.refreshでも駄目でしょうか。あるいはRefreshした後にRequeryではどうでしょうか。
簡単に試せるので試してみてください。
No.2
- 回答日時:
ついでに
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)???
No.1
- 回答日時:
一つ質問です。
>確定済みの予約レコードは、削除します。
この場合、削除方法はどのような方法ですか?できれば確定ボタン_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
-----------------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
みんなに挑戦してほしい「色彩検定」
これまで多くの方々が受検したが「色彩検定」。その目的や活用法は人それぞれ。今回は、色彩検定に影響を受けた男女3名にインタビュー。
-
「実行時エラー '3167' レコードは削除されています。」を回避する方法
Visual Basic(VBA)
-
Access「レコードが削除されました」のエラー
Access(アクセス)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
4
レコード削除時に(サブ)フォームに表示される#Deleted"について"
Access(アクセス)
-
5
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
6
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
7
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
8
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
9
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
10
どこにもフォーカスを当てたくない
Access(アクセス)
-
11
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
12
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
13
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
14
Access VBA コントロールの参照が上手く行かない
その他(プログラミング・Web制作)
-
15
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
16
ACCESS──メインフォームでサブフォームのレコード件数をカウントしたい
Access(アクセス)
-
17
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
18
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
19
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
20
Microsoft Access 2016でエラーが出る
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
3つ以上のテーブルをUNIONする...
-
5
Access VBA Me.Requery レコー...
-
6
ACCESS 『DoCmd.OutputTo』に...
-
7
数百万件レコードのdelete
-
8
(ACCESS)並び替えをしないで...
-
9
フォームからのレコード削除に...
-
10
テーブルのレコード削除ができ...
-
11
ACCESSファイルを開こうとする...
-
12
Access 削除クエリが重い
-
13
ACCESS【更新クエリの中断がで...
-
14
Accessの重複クエリで最小以外...
-
15
ACCESSのBookmarkプロパティの...
-
16
SQLServerで同一条件レコードの...
-
17
Accessでの禁止文字チェック
-
18
Accessでの排他制御
-
19
キーが重複したレコードを無視...
-
20
Accessでの自己結合?
おすすめ情報
公式facebook
公式twitter