• ベストアンサー

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

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

  • Hugh
  • お礼率48% (45/92)

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

とりあえず、受付時は返却=1でレコードを登録し、終了時に返却=2で別のレコードとして登録して、元の返却=1の方を削除するということにします。 まず、確認ですが、終了時に座席番号を元にということですが、 ・座席番号はユニークですか? ・また、ある人が終了しない限り、他の人はその座席番号では受付出来ないということになっていますか? 以上の前提の場合は、返却=2で登録後に、以下のように削除します。 なお、[最終]テーブルの[座席番号]と[返却]フィールドは長整数型(Long)とします。 Dim SQL As String SQL = "DELETE * FROM 最終 " & _    "WHERE 座席番号 = " & CLng(Me.座席番号) & " AND 返却 = 1" DoCmd.RunSQL SQL

Hugh
質問者

お礼

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

Hugh
質問者

補足

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

その他の回答 (3)

回答No.3

前に回答されている方の方法で問題なさそうな気がするのですが・・ これまでのやり取りをみても、よくわからないことがあります。 ・返却フラグフィールドが作ってあるのになぜその値を直接変更するのではなく、いちいちレコードを削除する必要があるのでしょうか? ・削除クエリの作り方は間違っていなかったのでしょうか?SQLを掲載していただければ検討できそうですが・・・

Hugh
質問者

お礼

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

Hugh
質問者

補足

本来ひとつのテーブルでやろうと思い返却フラグをつけたのですが、操作上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

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

やっぱり、1つのテーブルで出来るような気がするんですけど。 チェックアウト済みのデータを、順次サーバーに追加していきたいということでしょうか。 その場合は、チェックアウト時間を抽出条件にして、サーバーに吸い出せばいいと思いますが。 または、ユニークなフィールドを抽出条件にするとか。 ちなみに、テーブルへのレコード追加と削除は、SQLのINSERT文とDELETE文で出来ますよ。 VBAでは、文字列型の変数(例えばSQL)に、 SQL= "INSERT (以下略)" と代入して、 DoCmd.RunSQL SQL で出来ます。

Hugh
質問者

補足

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

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

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

Hugh
質問者

補足

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

関連するQ&A

  • 【Access】レコードが削除できない

    どんな操作をしてそうなったかわからないんですが、 テーブルの最終行に全フィールドのデータが「#Deleted」になっているレコードが出来てしまいました。 このレコードを削除し、一旦テーブルを閉じて、また開くと同じものが復活しています。 どうすれば消せますでしょうか??

  • アクセス フォームをリクエリしたい

    フォームAを閉じて、フォームBのテーブルに基づいたデータをリクエリ(更新)したいのですが DoCmd.Close acForm, "フォームA" DoCmd.Requery "フォームB" 実行時エラー2109 「カレントレコードには、フォームBという名前のフィールドはありません。」となってしまいます。 フィールド名ではなくフォームB全体を更新したいのですが、どうすればいいでしょうか? フォームBは開いている状態です。

  • Access97 マウスホイールでレコード移動させない方法?

    Access97のフォームでマウスホイールを動かすとレコードが勝手に移動してしまいます。ジャンプでは無く、一レコードずつのスクロールです。ホイールを動かす向きに従い、先頭レコードまたは最終レコードへ移動します。移動中は、フォームの各コントロール値が目まぐるしく変化し、先頭か最終に到達するまでは、移動が止まりません。 移動は次の状態で発生します。 フォーム詳細部に設定したテキストボックスで且つフォーカスを取得しているボックス(カーソル点滅状態)にマウスカーソルを位置付けしてホイールを動かした時です。 テキストボックスがテーブルフィールドと連結・非連結に無関係に移動が発生します。 この移動を止める方法を教えて下さい。

  • ACCESS 表形式フォームで1レコードずつ計算したい

    こんなことを考えています。 氏名  生年月日 Aさん 1950/8/8 Bさん 1988/10/8  :    : このテーブルを表形式フォームでそのまま表示し、 各レコードの後ろに「年齢」という非連結フィールドを 作って、そこに人ごとの年齢を計算して入れたいのです。 この場合表形式フォームが妥当なのかどうかもわかりません。 ただ、年齢の計算はそのフォームを開いた日で計算するので、 テーブルに年齢というフィールドは作りたくありません。 どんな方法がありますか?

  • MS-Access レコードセレクタのイベント

    こんにちは。 MS-Access2003です。レコードセレクタをダブルクリックした時に以下のようなイベントを設定したいと思っています。 1.テーブルの全データを一覧で表示するクエリを連結した、表形式のフォーム(フォームA)が  あり、そのレコードセレクタをダブルクリックします。 2.別に、そのテーブルを連結したフォーム(フォームB)があり、1.でダブルクリックしたデータが、  その「テーブルを連結したフォーム」に表示されて欲しい。 フォームAは参照のみであり、フォームBは更新可能な設定です。 レコードセレクタのイベントはマクロで組みたいのですが、フォームBを開いた後どうすれば そのデータをフォームBでフィルターをかけたように表示できるのかが分かりません。 ご教授いただけると助かります。 よろしくお願いいたします。

  • アクセスのフォームでのレコード移動ができません。

    アクセスのフォームでのレコード移動ができません。A(管理番号)B(会社ID)C(部品ID)D(担当者ID)のフィールドがあるのですが、A~Dの全てに入力した場合はレコード移動ができます。でもCとDを空欄にしたままでは移動できません。リレーションシップをCとDともはずしても変わりませんでした。どこがおかしいのか良きアドバイスをよろしくお願いいたします。

  • Accessでの新規レコードの追加の方法

    Windows XP上でMicrosoft Access 2000を使用しています。 オートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加したいのですが、クエリやそれを基にしたフォームを介した方法はもちろんのこと、テーブルをデータシートビューで表示した状態でも追加することができません。 例えばレコードセレクタからレコード追加を選んでレコード保存を選んでも追加されません。 このテーブルに別のフィールドを追加してデータを入れるとレコードの追加が可能なのですが、オートナンバー型フィールド1つのみではうまくいきません。 どなたかオートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加する方法を御存知でしたら御教示下さいませ。

  • Accessで最終レコードの削除について

    Accessで新規レコードを作成しないで最終レコードを削除したいのですが、方法をご存知でしたら教えて頂けないでしょうか。 現状は次の通りです。 レコード データ 1000   A 1001   B 1002   C ←最終レコード ※マクロで1002のレコードを削除すると レコード データ 1000   A 1001   B 1002   空白のレコード ←最終レコード となってしまいますが、これを レコード データ 1000   A 1001   B ←最終レコード としたいのです。 ちなみに最終ではない1001のレコードを削除すると レコード データ 1000   A 1001   C ←最終レコード となり、空白の新規レコードは作成されません。

  • ACCESSでレコードのコピー

    ACCESS初心者です。 テーブルt_Aとt_Bがあり、t_Aを元にしたフォームがあるとします。 行いたいのはこのフォームでレコードを選択しボタンをクリックして t_Aの該当レコードのフィールドの値をt_Bのフィールドにコピー(新規追加)したいのです。 追加クエリでなんとかなるかなと思ったのですが思うようなクエリが作れないのです。 アドバイスをいただけませんでしょうか。 マクロ、VBAの利用方法についてはほぼわかっております。

  • Access 2007で、テーブルからレコードを削除するクエリを作りた

    Access 2007で、テーブルからレコードを削除するクエリを作りたい。 具体的には、テーブルAのフィールドF1とテーブルBのフィールドF2があるとします。このとき、テーブルA中の各レコード(仮にXとします)であって、そのF1の値と同じ値をF2に持つレコードがテーブルBに含まれている場合は、(テーブルAから)そのレコードXを削除するという処理をしたいのです。ややこしいと思いますが、これをクエリやマクロで作ることはできるでしょうか? 私はVBAを知らない初心者です。上の処理も文章で書くと理解してもらえるかどうか不安ですが、だれか助けて下さい。

専門家に質問してみよう