- 締切済み
フォームから入力してテーブルにデータを落とすタイミング
お世話になっております。 業務上Access2000を使ってDBの構築をすることになりましたが、ひとつわからないことが出てきましたのでよろしくお願いいたします。 それは、フォームからデータを入力する際に「更新」ボタンを押して初めてテーブルに落とすようにしたいのですが、その方法がわからず困っております。 Accessの「ボタン」でレコード操作で変更を保存ボタンを設置させて試しても「保存」ボタンを押す前からデータがテーブルに落ちてしまっているようです。 これを、「保存」ボタンを押して初めてテーブルにデータが落ちるVBAでのロジックの組み方をどなたかよろしくお願いいたしす。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- tokumeikibou
- ベストアンサー率100% (1/1)
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)
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)
たぶんですけど・・・ テーブルのフィールドにA、B、Cとあったとします。 ウィザードを使用しないでフォームを作成してテキストボックスA、B、C を作ります。 ABCとも関連付け無しですから更新の際にABCを変数に代入して、Recordsetで テーブルに値を返すのかな? ※後で検索・修正出来るようにユニークなキーを必ず持たせるようにします。 実は入力系を作るときに私は、この方法を取っております。 ただし、私は専門家でもない一般人で初心者です。当然これが良い方法なのか は、わかりません。 ただし、注意する点として入力フォームには、新規入力・同文入力・修正入力 等など・・・大きく分けても処理を3つ作成しなければなりません。 入力量が多ければ多いほど上記の方法は重くなると思います。 >ではでは
単票型フォームの場合は、フォーム自体を非連結にしてフォーム上のコントロールの値をそれぞれテーブルに書き込んでいます。OpenRecordsetでテーブルを直接編集しています。 帳票型フォームの場合は、tarankoさんと同じく、入力用のワークテーブルを使用して更新ボタンを押した時に、初めてホンモノのテーブルに書き込むという方法です。修正の場合はちょっと厄介ですけどね。修正前のデータを修正用のデータとは別に持っておいて、そのデータを元に削除、修正用のデータ(入力用のフォームに連結しているテーブル)で編集後、ホンモノに書き込みします。この場合は同じデザインのテーブルが3つ(ホンモノ、入力用、退避用)必要です。
- taranko
- ベストアンサー率21% (516/2403)
保存したいテーブル(Aとします)と全く同じテーブル(Bとします) をもう一つ作ってください。 フォームから入力するとBのテーブルにデータが入力され、 更新ボタンを押すとAのテーブルに更新クエリーでデータを 更新するという方法ではいかがでしょうか。 Aのテーブルにデータを更新した後はBのテーブルの中身を 削除クエリーで削除する必要があります。 私はこの方法を取っています。
補足
早速のご回答ありがとうございます。 テーブルを2つに増やしてする方法もあるのですね(^^ 教えていただいた方法で試してみますが、なんせDBのテーブル数が多いもので・・・ できましたらテーブルの数を増やさないでする方法はないのでしょうか? わがまま言って申し訳ございませんm(_ _)m よろしくお願いいたします