こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access2000でのレコードの削除と移動

ccess2000で テーブルがA と Bあり
テーブルAは一時保存用で最終的にBに保存しようとしてます。
まず、データをフィールド1が空欄でAに保存して、後にそのデータをフォームで呼び出し、フィールド2を入力後テーブルBに保存その呼び出したカレントレコードのみ削除したいのですが、どうすればいいのでしょうか>
フォームは連結されていません。

可能であればサンプルコードをいただくと助かります。

お願い致します。

投稿日時 - 2002-11-20 15:13:21

QNo.409156

すぐに回答ほしいです

質問者が選んだベストアンサー

とりあえず、受付時は返却=1でレコードを登録し、終了時に返却=2で別のレコードとして登録して、元の返却=1の方を削除するということにします。

まず、確認ですが、終了時に座席番号を元にということですが、
・座席番号はユニークですか?
・また、ある人が終了しない限り、他の人はその座席番号では受付出来ないということになっていますか?

以上の前提の場合は、返却=2で登録後に、以下のように削除します。
なお、[最終]テーブルの[座席番号]と[返却]フィールドは長整数型(Long)とします。


Dim SQL As String

SQL = "DELETE * FROM 最終 " & _
   "WHERE 座席番号 = " & CLng(Me.座席番号) & " AND 返却 = 1"
DoCmd.RunSQL SQL

投稿日時 - 2002-11-21 13:09:40

補足

早速ありがとうございます。
うまく動くようになったんですが、
0件のレコードがテーブルから削除されます、、、
「はい」をクリックするとテーブルから削除されます。
とダイアログボックスが表示され「はい」をくりっくしても削除されません。
どこが悪いのか見当もつきません。
またダイアログを出さなくするには、

DoCmd.SetWarnings False
にすればいいんですよね?

投稿日時 - 2002-11-21 15:37:52

お礼

おかげさまでなんとかできました。
大変ご親切に教えていただいて感謝しております。
また今後も宜しくお願いします。

投稿日時 - 2002-11-21 16:47:25

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

前に回答されている方の方法で問題なさそうな気がするのですが・・
これまでのやり取りをみても、よくわからないことがあります。

・返却フラグフィールドが作ってあるのになぜその値を直接変更するのではなく、いちいちレコードを削除する必要があるのでしょうか?
・削除クエリの作り方は間違っていなかったのでしょうか?SQLを掲載していただければ検討できそうですが・・・

投稿日時 - 2002-11-21 00:21:56

補足

本来ひとつのテーブルでやろうと思い返却フラグをつけたのですが、操作上2つのほうがよいと思い2つにしました。
保存テーブルから受付した情報と取り出すのですがそのテーブルは操作するPCに置き、最終テーブルはサーバーに置いています。
削除クエリはどうしてもそのカレントフィールドのみ削除する抽出条件がわからず困っています。
それともVBAでコードを書いたほうがよいのでしょうか?
でも書き方がいまいちわからないので教えていただくと大変助かります。
ちなみにこんなコードです。
にわか仕込みですので不適切な部分もあると思いますが、気になられたら何なりとご指摘ください。

Public Sub 返却処理()

Dim rst As New ADODB.Recordset

Set rst = New ADODB.Recordset

rst.Open "最終", _
CurrentProject.Connection, adOpenKeyset, adLockOptimistic

rst.AddNew


rst![学生番号] = Me.学生番号
rst![氏名] = Me.氏名
rst![yomi] = Me.yomi
rst![受付時間] = Me.受付時間
rst![日付] = Me.日付
rst![終了時間] = Me.終了時間
rst![座席コード] = Me.座席コード
rst![座席番号] = Me.座席番号
rst![性別] = Me.性別
rst![履修] = Me.r.Value
rst![ホームページ] = Me.h.Value
rst![電子メール] = Me.m.Value
rst![レポート作成] = Me.re.Value
rst![就職利用] = Me.j.Value
rst![その他] = Me.o.Value
rst![MO] = Me.MO.Value
rst![プリンター] = Me.pri.Value
rst![スキャナ] = Me.scan.Value
rst![ZIP] = Me.ZIP.Value
rst![返却] = "2"


rst.Update

rst.Close
Set rst = Nothing


Me.入力用テキストボックス = ""
Me.学生番号 = ""
Me.受付時間 = ""
Me.氏名 = ""
Me.座席コード = ""
Me.座席番号 = ""
Me.yomi = ""
Me.性別 = ""
Me.終了時間 = ""

Me.r.Value = False
Me.h.Value = False
Me.m.Value = False
Me.re.Value = False
Me.j.Value = False
Me.o.Value = False
Me.MO.Value = False
Me.scan.Value = False
Me.pri.Value = False
Me.ZIP.Value = False

DoCmd.SetWarnings False
DoCmd.OpenQuery "削除クエリ"
DoCmd.SetWarnings True





入力用テキストボックス.SetFocus

End Sub

投稿日時 - 2002-11-21 10:21:28

お礼

おかげさまでなんとかできました。
大変ご親切に教えていただいて感謝しております。
また今後も宜しくお願いします。

投稿日時 - 2002-11-21 16:48:18

ANo.2

やっぱり、1つのテーブルで出来るような気がするんですけど。
チェックアウト済みのデータを、順次サーバーに追加していきたいということでしょうか。
その場合は、チェックアウト時間を抽出条件にして、サーバーに吸い出せばいいと思いますが。
または、ユニークなフィールドを抽出条件にするとか。

ちなみに、テーブルへのレコード追加と削除は、SQLのINSERT文とDELETE文で出来ますよ。
VBAでは、文字列型の変数(例えばSQL)に、
SQL= "INSERT (以下略)"
と代入して、
DoCmd.RunSQL SQL
で出来ます。

投稿日時 - 2002-11-20 16:18:20

補足

ありがとうございます。
今の現状では保存テーブルにユーザー名、開始時間、座席番号等をフォームで入力して保存してます。
次にそのユーザーが終了した時点で座席番号を元に保存テーブルからレコードを呼び出して、最終テーブルに保存しているんです。
試験的にテーブルをひとつにしようと試したのが、
新たに返却というフィールドをつくり、受付時には返却1として入力、終了時には返却2として新たなレコードを追加。この時点では終了時間なしのレコードとありのレコード(一人に対して2つのレコード)があり、削除クエリで
返却が1のもののみそのテーブルから削除としましたが、
まだ終了していない人のレコードまで全部削除されてしまいました。どのようにすればよいのかお知恵を拝借させてください。

投稿日時 - 2002-11-20 16:27:59

ANo.1

こんにちは。maruru01です。

質問ですが、
なぜ、一時保存用と最終のテーブルに分けるのでしょうか。
場合によっては、1つのテーブルに統合することが出来るかも知れません。
1つのテーブルの方が、たいていは処理が簡単になります。

投稿日時 - 2002-11-20 15:25:50

補足

ありがとうございます
一時保存のテーブルは操作するPCに保存して新たにデータを呼び出し、追加してからそのテーブルを別のサーバー(Mysql)に保存したい為です。
このプログラムは受付用のシステムで受付をしてユーザー名、座席を登録します。終了した時点でチェックアウトの時間をそのレコードに追加して最終テーブルに保存したいのです。
この説明でわかっていただけましたでしょうか?

投稿日時 - 2002-11-20 15:39:50

あなたにオススメの質問