メインテーブルにはオートナンバーのIDと日付やその他があり、サブテーブルにはメインとの連結用ID、オートナンバーの明細ID、品目、その他があります。サブにだけデータを追加するには追加クエリーで出来るのですが、一度にメイン、サブに追加がしたい時があります。例えば他のフォームの非連結データを新規レコードにコピーするイメージです。どうすれば可能か分からないのです。
通報 ...
メインテーブルにはオートナンバーのIDと日付やその他があり、サブテーブルにはメインとの連結用ID、オートナンバーの明細ID、品目、その他があります。サブにだけデータを追加するには追加クエリーで出来るのですが、一度にメイン、サブに追加がしたい時があります。例えば他のフォームの非連結データを新規レコードにコピーするイメージです。どうすれば可能か分からないのです。
メインに追加してから、サブに追加という2段階ではだめなんですか。
メインのIDがオートナンバー型でインクリメントなら、最大値が新規IDということになります。
hatenaさん ありがとうございます。2段階でも全然OKなのですが、それはコマンドボタン1つで可能でしょうか?
可能です。
下記はVBAで追加クエリのSQLを実行する場合のコード例です。
詳細が不明なので、テーブル名、フィールド名、コントロール名は適当ですので雰囲気だけつかんで、あとは状況に合わせて改修してください。
下記はDAOを使って新規追加する場合のコード例です。
こちらの方が分かりやすいかもしれません。
hatenaさん丁寧な解説ありがとうございます。SQL、DAOで直接した事はなくチャレンジしてみたいと思いますが、因みに手始めに追加クエリをメイン用、サブ用を用意してクエリ実行でも可能でしょうか?(すみません)
可能です。
サブ用の方は、メインの新規IDが必要になりますので、そこはDMax関数で取得することになります。
hatenaさんへ 追加クエリではなく教えて頂いたDAOでしました。追加は出来たのですが、サブには1レコードづつなのですね? 40レコード程あるのですが、(メイン1つに対して)一括では出来ないのでしょうか? (知識不足ですみません)
あとついでにお聞きするのですが rs.Close の後は Set rs = Nothing と記述した方がいいのでしょうか?
40レコード程あるとのことですが、非連結フォームなんですよね。
40レコード分の非連結コントロールがあるということですか。
それとも一時テーブルをレコードソースとするサブフォームが埋め込まれているとか。
プロシージャを抜ければ、自動で廃棄してくれますので、なくても問題ないです。(あっても問題はないですが。)
プロシージャが長くて、途中で使用済みになったというようなときに、使用済みということを明確にするために、
Set rs = Nothing とするということはありえます。
hatenaさん すみません40件程のレコードは非連結というか、あるテーブルに保存されたものです。そのテーブルを加工したクエリがありそれを基に作成したリスト形式のフォームがあります。そのフォームにはサブフォームはありません。金額等の数字だけを入力してまして(項目は固定)それを別テーブルに追加する形です。追加先は日々の処理用でメインが日付や他の項目、サブに必要な項目や金額等が入ります。そのリスト型フォーム上のデータをコマンドボタンで追加したいのです。
非連結という言葉の意味を誤解しているようですね。
フォームがテーブルと連結してたら非連結とはいいません。
VBAでするならForループでレコード件数分繰り返せはいいでしょう。
ただ、テーブルがあるのなら追加クエリの方が楽です。
どのような意味で「非連結」という言葉を使ったのでしょうか。
それぞれのテーブル名、フィールド構成、を提示して、
それぞれのデータ例を提示して、
どのような結果が欲しいのか説明してもらえますか。
hatenaさん情報不足で色々すみません。非連結の認識は勘違いしてました。対象のフォームに直接関係ないイメージでとらえてました。今回の関連するテーブル構成としては下記になってます。
①処理メイン:メインID、日付、伝票番号、その他項目 ②処理サブ:サブID、品目A、品目B、金額A、金額B、メインID、その他の項目 *品目と金額入力欄が各2ヶ所あり ③品目一覧:品目ID、品目名、繰越金額、グループID ④グループ一覧:グループID、グループ名
社内用財務関係のファイルです(作成途中)。
特定の品目に繰越金額を入力して(半年毎)、それを処理メイン、サブに追加したいのです(日付設定は任意)。但し品目のグループにより品目A・金額Aに入るか品目B・金額Bに入るかの切り分けがあります(繰越時)。
③の品目一覧テーブルを基に特定の項目に対する繰越金額を入力できるフクエリを作成しました。入力したら品目A・金額A、Bに切り分ける為にIIFで処理してます。入力し易い様にこのクエリを基にリスト型フォームを作成し、処理メイン、サブに追加できるコマンドボタンを用意したいのです。
●繰越入力イメージ
品目 繰越 IIFにて切り分け ★フォームには任意の日付欄と伝票番号(共に非連結)
あ 1000 ⇒ 品目A・金額A
い 500 ⇒ 品目B・金額B
●処理イメージ(メイン)
日付 伝票番号
3/31 0000
●処理イメージ(サブ)
品目A 金額A 品目B・金額B
あ 1000
い 500
1レコードづつ追加は教えて頂いたDAOコードで出来ましたのでそれに繰り返し処理が出来たらいいかなと思ってます。
でもそれはどうやってしたらいいか分からなくて。
お手数かけます。
>●処理イメージ(サブ)
品目A 金額A 品目B・金額B
あ 1000
い 500
但し品目のグループにより品目A・金額Aに入るか品目B・金額Bに入るかの切り分けがあります
下記のようにしない理由は?
●処理イメージ(サブ)
りんごさん 財務の振替の様なもので伝票に記入するイメージで直感的にそれに沿った処理フォームにしています。実際は
品目A 金額A 品目B・金額B
あ 1000 繰越 1000
繰越 500 い 500
で金額AとBの合計値は合致させる必要があります。(繰越入力フォーム基のクエリでこうなる様にしてます)
繰越時はA・Bどちらかになるかは決まってますが日々の処理ではどちらかになるかはランダムなのです。
これも説明不足でした(すみません)。
要するにこういう事?
りんごさん イメージとしてはそんな感じですが、日付や取引先(Nullの場合あり)・伝票番号・その他テキストはメインテーブルにしてます。サブにはA、Bの品目・金額は両方とも入力必要で(相対品目として)、繰越入力の時は説明した通りの決まった切り分けとなります。
品目の相対関係を管理するテーブルを別に作らないの?
まずは、きちんと正規化しておかないと、質問して完成しても、設計が杜撰だから破綻している、捨てて下さいとなるだけですよ。残念ながら。
りんごさん相対関係は最初作ろうと思ってたのですが内容的にお互い全てが対象となりますので不可なのです。品目はコンボで選択する形になっており、よくあるパターンとして絞り込みは出来る様にしているのです。