- ベストアンサー
レコード追加の連番付き方法と受取確認テーブルの作成について
- あるレコードから別のテーブルに任意の番号から連番を付けて同じレコードを追加する方法をご教示ください。
- 発行した引換券の受取確認をするためのテーブルの作成方法について教えてください。
- 簡単な方法で実現できるか教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Q、簡単で良い方法。 A、それは、INSERT INTO 文を発行すること。 ' ' INSERT INTO 文の雛型 ' strSQL = "INSERT INTO tablename VALUES(XXXXX,YYYYY, 0)" ・・・・・ ' ' 一時テーブルへの追加 ' Do ' ' INSERT INTO 文 ' strINSERT = Replace(strSQL, "XXXXX", "みかん引換券") ' ' INSERT 実行 ' N=開始引換券番号 M=発行枚数 FOR I=1 TO M strINSERT = Replace(strINSERT, "YYYYY", N+I) StopNow = CNNExecute(strInsert) NEXT I ・・・・・ 確かに、知恵を絞れば INSERT INTO SELECT文を書けるかも知れない。でも、その知恵を絞り出そうと腐心している30分かそこらで上記のコードは書けます。ですから、「一番に簡単で良い方法」とは素直にINSERT INTO 文を発行することです。
その他の回答 (2)
- m3_maki
- ベストアンサー率64% (296/460)
「簡単で良い方法」かどうか?? Sub test() Dim dbs As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim cnt As Long Set dbs = CurrentDb Set rs1 = dbs.OpenRecordset("引換券発行テーブル", dbOpenForwardOnly) Set rs2 = dbs.OpenRecordset("受取確認テーブル", dbOpenDynaset) Do Until rs1.EOF For cnt = 0 To rs1!発行枚数 - 1 With rs2 .AddNew !種類 = rs1!種類 !引換券番号 = rs1!開始引換券番号 + cnt .Update End With Next rs1.MoveNext Loop End Sub 「引換券番号」が数値型の場合です。
お礼
お返事ありがとうございます。遅くなってしまい申し訳ございません。 正直なところDAOとか全くわからなくて、こんなのがスラスラと思いついて書ければACCESSももっと面白くなるのですが・・。 でも、出来なくてもそれっぽい物が作れてしまうのがACCESSのすごいところです。 お返事をいただいたときに、ちょうど1で回答をいただいたものを参考にしたものが動いたので、今回はそれを使用してみます。 本当にありがとうございました。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【補足】実際にコードを書き始めたら・・・ 現状では、完全なコードを書くのは無理ってことが判明。理由は、テーブル設計の不完全さにあります。 《テーブル:引換券発行履歴》 ID 受付日 受付管理番号 種類 開始引換券番号 発行枚数 《テーブル:受注確認台帳》 種類 受付日 受注管理番号 引換券番号 受取 ・主キー列[引換券発行履歴].[ID]がないと登録順で呼び出せない。 ・列[受付管理番号]がないとテーブル[受注確認台帳]が更新できない。 (1)[受付管理番号]の変更・削除を反映する。 (2)[開始引換券番号]の変更を反映する。 (3)[発行枚数]の変更を反映する。 いずれの場合にも列[受付管理番号]の存在を必要とします。 テーブル[引換券発行履歴]のデータに追加・変更・削除が発生したら適切に[受注確認台帳]を修正する必要があります。ですから、追加修正もあれば一部訂正もあります。それだけではなくて削除を行う場合もあります。こういう事を考えたら、チョイとコードを書いて「出来るよ!」って答えるのは不可能という結論に達しました。 以上、補足しておきます。
お礼
お返事が大変遅くなって申し訳ございません。 実のところSQLとかDAOとか全くわからなくて往生していました。 f_a_007さんのお返事を参考にしまして Dim strTablename As String Dim mySQL As String Dim i As Long strTablename = "T_チケット情報" i = 開始引換券番号 - 1 Do i = i + 1 mySQL = "INSERT INTO " & strTablename & " (チケット番号,種類,発行ID)" mySQL = mySQL & "VALUES(" & i & ",種類,発行ID);" DoCmd.RunSQL mySQL Loop While i < 最終引換券番号 と、いうような感じで作りました。 取りあえず、思うようには動いています。 主キーの”発行ID”を新しいテーブルのフィールドに入力するようにして、それを元に削除クエリで一括削除できるようにしました。 ただ、訂正の際は・・・また考えます。^^; 取りあえず、訂正の際は赤黒しようかと考えています。 本当にありがとうございました。