• 締切済み

フォームから入力してテーブルにデータを落とすタイミング

お世話になっております。 業務上Access2000を使ってDBの構築をすることになりましたが、ひとつわからないことが出てきましたのでよろしくお願いいたします。 それは、フォームからデータを入力する際に「更新」ボタンを押して初めてテーブルに落とすようにしたいのですが、その方法がわからず困っております。 Accessの「ボタン」でレコード操作で変更を保存ボタンを設置させて試しても「保存」ボタンを押す前からデータがテーブルに落ちてしまっているようです。 これを、「保存」ボタンを押して初めてテーブルにデータが落ちるVBAでのロジックの組み方をどなたかよろしくお願いいたしす。

みんなの回答

回答No.5

FORMのモジュールレベル変数にDAO.Workspaceを宣言します。 Dim mws As DAO.Workspace FORMのオープン時に、 Dim db As DAO.Database Dim rs As DAO.Recordset Set mws = DBEngine.CreateWorkspace("", "admin", "", dbUseJet) Set db = mws.OpenDatabase(CurrentDb.Name) Set rs = db.OpenRecordset("table_name", dbOpenDynaset) Set Me.Recordset = rs mws.BeginTrans 保存ボタンで、 mws.CommitTrans 大体は、こんなかんじでいいのでは?

  • jun1192
  • ベストアンサー率0% (0/0)
回答No.4

Accessで入力画面を作成するのであれば、ワークテーブルを利用するのが いいと思います。 mdbファイルを3つ作成し、 (1)プログラム用 (2)データベース用 (3)ワークテーブル用 とし、(1)のMDBファイルに、(2)と(3)のテーブルをリンクする形式にします。 (1)にフォームを新規作成し、(3)のテーブルを連結させます。 ただし、キー項目は、非連結にします。 (3)のテーブルと(2)のテーブルは同じ内容にして、 更新ボタンを押下したら、 ワークテーブルの内容をそのままデータベース用のテーブルに追加クエリー のSQLを実行するのはどうでしょう。 キー項目を非連結にするのは、もし、既に入力しているデータがある場合に キー項目の番号かIDを入力した時点で、内容を画面表示して、変更という 形式をとる為です。 この場合は、入力された番号かIDを検索して、データが存在しなければ 新規入力、データが存在すれば、訂正入力となると思います。 訂正入力の場合は、 dim SQL as string Rem テーブルAはデータテーブル Rem WテーブルAはワークテーブルとします。 sql = "" sql = sql & "insert into " sql = sql & "テーブルA " sql = sql & "select * from WテーブルA;" docmd.setwarnings false docmd.runsql sql docmd.setwarnings true の追加クエリーを実行する前に 既に存在するデータを削除するSQL sql = "" sql = sql & "delete * from テーブルA " sql = sql & "Where(キー=" & me![キー] & ")" sql = sql & ";" docmd.setwarnings false docmd.runsql sql docmd.setwarnings true を実行する必要があります。 (キーが重複する為) 参考にしていただけるのであれば、 詳細のサンプルでもおくります。 ゴミならすみません!

  • pooh_200x
  • ベストアンサー率46% (7/15)
回答No.3

たぶんですけど・・・ テーブルのフィールドにA、B、Cとあったとします。 ウィザードを使用しないでフォームを作成してテキストボックスA、B、C を作ります。 ABCとも関連付け無しですから更新の際にABCを変数に代入して、Recordsetで テーブルに値を返すのかな? ※後で検索・修正出来るようにユニークなキーを必ず持たせるようにします。 実は入力系を作るときに私は、この方法を取っております。 ただし、私は専門家でもない一般人で初心者です。当然これが良い方法なのか は、わかりません。 ただし、注意する点として入力フォームには、新規入力・同文入力・修正入力 等など・・・大きく分けても処理を3つ作成しなければなりません。 入力量が多ければ多いほど上記の方法は重くなると思います。 >ではでは

noname#1296
noname#1296
回答No.2

単票型フォームの場合は、フォーム自体を非連結にしてフォーム上のコントロールの値をそれぞれテーブルに書き込んでいます。OpenRecordsetでテーブルを直接編集しています。 帳票型フォームの場合は、tarankoさんと同じく、入力用のワークテーブルを使用して更新ボタンを押した時に、初めてホンモノのテーブルに書き込むという方法です。修正の場合はちょっと厄介ですけどね。修正前のデータを修正用のデータとは別に持っておいて、そのデータを元に削除、修正用のデータ(入力用のフォームに連結しているテーブル)で編集後、ホンモノに書き込みします。この場合は同じデザインのテーブルが3つ(ホンモノ、入力用、退避用)必要です。

  • taranko
  • ベストアンサー率21% (516/2403)
回答No.1

保存したいテーブル(Aとします)と全く同じテーブル(Bとします) をもう一つ作ってください。 フォームから入力するとBのテーブルにデータが入力され、 更新ボタンを押すとAのテーブルに更新クエリーでデータを 更新するという方法ではいかがでしょうか。 Aのテーブルにデータを更新した後はBのテーブルの中身を 削除クエリーで削除する必要があります。 私はこの方法を取っています。

obahiro
質問者

補足

早速のご回答ありがとうございます。 テーブルを2つに増やしてする方法もあるのですね(^^ 教えていただいた方法で試してみますが、なんせDBのテーブル数が多いもので・・・ できましたらテーブルの数を増やさないでする方法はないのでしょうか? わがまま言って申し訳ございませんm(_ _)m よろしくお願いいたします

関連するQ&A

  • ACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

    フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。 売上テーブル  ID   商品コード  日付    金額   1    G1     20080101  532153  2    G1     20080101  564281  3    G1     20080301  538123  4    J4     20080301  124531  5    J4     20080302  125483 ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型 これを使い、 フォームではまず レコードナンバーを入力画面        ↓ レコード番号を入れると、そのレコードのデーターが画面に表示され、 その画面で修正可能        ↓  保存 ボタンで保存 という流れです。 レコードナンバーはIDを使おうと思っています。 データの量が莫大な為、コンポボックスなどは使えません。 できるだけ、VBAなどは使わずに作りたいです。 よろしくお願い致します。

  • テーブルにデータを保存するフォームの考え方

    Access2000で勉強中ですが、フォーム上にID 商品名 単価 のテキストボックスを作成しました。 その下に、保存されたデータを表示されるようにサブフォームを作っています。そして 新規保存・修正・削除ボタンを1つの入力フォーム上に作成して処理できるものを作ろうと考えています。 サブフォームのレコードセレクタを指定して修正ボタンを 押すとテキストボックスに内容が表示されて修正できるようにするにはどうすればよいでしょうか? 説明が下手なのですが、簡単に言うと サブフォーム上ではレコードの選択(レコードセレクタ)の指定だけで入力をさせないようにしたいのです。 VBAのレコードセレクタの取得が良く判らないので よろしくお願い致します。

  • フォーム内のデータをすべて更新したい

    フォーム内のデータをすべて更新したい ACCESSでデータ入力ができるようにフォームを作成しました。 わりと頻繁に同じ様な内容のデータを入力することがあり、レコードのコピーをボタンウィザードのレコードの複製を使わず、選択しているレコードで必要な部分のみをコピー用に用意したテーブルに追加して、追加したテーブルから元のテーブルに追加するというマクロを作成しました。 テーブルにはデータは追加されているのですが、フォーム上には「F5キー」やメニューの「すべて更新」ボタンをクリックしないとフォーム上に現れません、マクロ「再クエリ」や「コマンドの実行」-「最新の情報に更新」を入れてみましたが、「F5キー」やメニューの「すべて更新」ボタンをクリックした時のような動作はしてくれませんでした。 どういったマクロを作ればよいかご教示いただけないでしょうか。 緒ろしくお願いいたします。 ACCESS 2007を使っています

  • Accessのフォームでデータ入力時に保存するタイミング

    Accessでフォームを使ってデータを追加しているときに、データを入力した時点でレコードに追加されてしまいますよね? それを、保存ボタンなどで実行してからレコードに追加されるようにするにはどうしたらいいでしょうか? どなたかご存知でしたらおねがいします。

  • accessの入力フォームでの入力規制

    amuro-kamuiと申します。過日はレスのつかない質問をしてしまい反省しています。 実は職場で使うなんちゃってDBを作っているのですがどうも不満足なので解決策をご教授いただきたいと思い質問させていただきます データ入力フォームを作りいくつかの項目(37個)を入力しているのですが、途中で誤った操作をしてもそのレコードが追加されてしまい困っています。 フォームの中に保存ボタンをつくりました。 このボタンをクリックするまではデータが保存されないようにするにはどうしたらいいのでしょうか? 本当に初歩的な質問ですがよろしくお願いします

  • Accessのフォームから削除したレコードをテーブルに保存したい

    Accessを利用してフォームからデータを入力しているのですが、クエリを使わずフォーム画面から不必要なレコードをコマンドボタンで削除しています。削除したレコードをテーブルに保存したいのですが、追加クエリで条件を決めずにフォームの画面から判断したレコードだけを削除し、かつ削除したレコードを削除専用のテーブルに追加する方法を教えてください。よろしくお願いします。

  • レコード削除時に(サブ)フォームに表示される"#Deleted"について

    アクセス97についての質問なのですが。 フォームのレコードソースにテーブルのデータを割り当て、そのデータをテーブル上(VBA等を使って)で削除するとフォームには"#Deleted"っていう文字が表示されてしまいます。これが厄介で"shift+f9"を押さないと更新ができません。 メニューバーにある"レコードの削除"ボタンによる削除なら問題はないのですが…… 会社の他の部署の人にあまりパソコンに詳しい人がいないので、できたら自分の作ったフォーム内で全ての処理が簡単にできるようにしたいと考えています(間違ったことをやらせないためにも)。 できましたら、VBAによる更新の仕方を教えてください。 あるいは、メニューバーをコマンドボタンに割り当てる方法でもかまいません。 よろしくお願いいたします。

  • Access2007:フォームからに誤って上書きして元のデータが消えてしまった

    Access2007でフォームから誤って3件のデータを上書きしてしまいました。テーブルのデータが変更されてしまって、元にあったデータがなんて書いてあったのかわからなくなりました。アクセスでは、レコードを移動するたびに自動保存されるので、間違って上書きしたデータが保存されてしまい、元のデータがわからなくなりました。"戻る"ボタンで戻っても、レコードを上書きした後の状態までしか戻せませんでした。このような時、どうすれば元のデータがわかりますか?

  • ACCESSのフォームでの入力について

    ACCESS2000を使用しています。初心者のほうです。住所録のテーブルを作って、作業用のフォームを表形式で作りました。そのフォームに宛名印刷するためのコマンドボタンを配置しています。フォーム上で一件入力し、そのコマンドボタンを実行するのですが、その時点ではレコードとして入力されていないようで、実行できません。フォームを一度閉じて、また開くと出来るようになります。1件のレコードをフォームから入力すると同時にテーブルへも保存されていくようにしたいのですが、簡単にやる方法はないでしょうか?

  • Access、更新用データと連結したフォーム

    度々の質問で恐縮です。 検索フォームの検索結果を、レコードセレクタのWクリックで、 更新するためのテーブルと連結したフォームを開いて、 そのフォーム項目に「値の代入」をしています。 で、その「更新用データのフォーム」で更新項目を編集し、 ボタンを押すと「フォームと連結したテーブル」を使った更新クエリを実行する、 というマクロを実行するようにしてみました。 その処理を実行後、「更新用のフォーム」を閉じて、最初に書いた検索フォームで 検索すると、更新実行結果が反映しません。 レコードセレクタのWクリックを抜きにして、直接「更新用フォーム」を開き、 そのフォームにある「更新用のマクロ」を実行するボタンをキックすると反映します。 で、今は更新用フォームからマクロをキックするボタンは消して、 更新用フォームを閉じると、更新用データのテーブルは更新項目を反映しますので、 直接「更新用マクロ」をキックするだけのボタンしかないフォームを別に開いて、 そのボタンを押すようにしています。 最初の構成で、つまり、「更新用フォームで編集し、その画面のボタンで 更新用マクロをキックして更新実行したい」のですが、編集内容が 「更新データテーブル」に反映するには、どうすれば良いでしょうか? くだくだしい説明を書いてしまい、まことに申し訳ありませんが、よろしくお願いします。