-PR-
締切済み

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

  • すぐに回答を!
  • 質問No.184949
  • 閲覧数2846
  • ありがとう数4
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 46% (22/47)

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

回答 (全5件)

  • 回答No.1
レベル14

ベストアンサー率 21% (516/2403)

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

私はこの方法を取っています。
補足コメント
obahiro

お礼率 46% (22/47)

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


  • 回答No.2

単票型フォームの場合は、フォーム自体を非連結にしてフォーム上のコントロールの値をそれぞれテーブルに書き込んでいます。OpenRecordsetでテーブルを直接編集しています。


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

ベストアンサー率 46% (7/15)

たぶんですけど・・・
テーブルのフィールドにA、B、Cとあったとします。
ウィザードを使用しないでフォームを作成してテキストボックスA、B、C
を作ります。
ABCとも関連付け無しですから更新の際にABCを変数に代入して、Recordsetで
テーブルに値を返すのかな?
※後で検索・修正出来るようにユニークなキーを必ず持たせるようにします。

実は入力系を作るときに私は、この方法を取っております。
ただし、私は専門家でもない一般人で初心者です。当然これが良い方法なのか
は、わかりません。
ただし、注意する点として入力フォームには、新規入力・同文入力・修正入力
等など・・・大きく分けても処理を3つ作成しなければなりません。
入力量が多ければ多いほど上記の方法は重くなると思います。
>ではでは
  • 回答No.4
レベル3

ベストアンサー率 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
を実行する必要があります。
(キーが重複する為)
参考にしていただけるのであれば、
詳細のサンプルでもおくります。
ゴミならすみません!
  • 回答No.5
レベル4

ベストアンサー率 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

大体は、こんなかんじでいいのでは?
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-

特集


専門家があなたの悩みに回答!

ピックアップ

ページ先頭へ