- ベストアンサー
Accessで販売管理システムを構築し、受注に転記機能を実装したい
- Accessにて販売管理システムを構築し、T_見積伝票&T_見積明細に入力された内容を受注に転記する機能を実装したいです。
- T_見積伝票とT_見積明細がリレーションしており、対応するフィールドの内容のみをT_受注伝票&T_受注明細にコピーしたいです。
- 追加クエリを使用して実現する方法があるようですが、具体的な方法がわからず困っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>この記述で複数の明細をコピーできるのでしょうか? 出来ますよ。条件を満たすレコードを自動的に全て追加できます。 例えば、見積伝票(見積ID=1)に複数の明細がある場合、 SELECT * FROM T_見積明細 WHERE T_見積明細.見積ID = 1; 上記の【選択】クエリで、複数のレコードが【選択】できますよね。これと同様に【追加】クエリなら、複数のレコードが【追加】されます。SQL(クエリ)の便利なところです。こういう言語を非手続き型言語と言います。 今回のプログラムでは、受注IDの問題があったので、前半はDAOのRecordsetを使って、手続き型の処理をしています。後半はSQLを使って非手続き型の処理をしています。
その他の回答 (1)
- venzou
- ベストアンサー率71% (311/435)
>逆にT_見積明細とT_受注明細は主キーとなってるIDのみ違うだけで 見積IDと受注IDも異なりますよね。 追加クエリでは、T_受注伝票に追加した時に振られるオートナンバーが取得できないので、追加したレコードの受注IDが分からなくなります。 スタンドアロンで使用すると言う前提なら、Max(受注ID)で取得可能かな。 ---------------------------------------- VBAを使ってよいなら。 見積伝票の入力フォームに、「受注に転記」ボタンを追加して、クリック時のイベントプロシージャに下記を記述。 Private Sub コマンド0_Click() Dim rs As DAO.Recordset Dim SQL As String Dim ID As Long '受注伝票に追加(DAOを利用) Set rs = CurrentDb.OpenRecordset("T_受注伝票", dbOpenDynaset) rs.AddNew ID = rs![受注ID] '受注IDを取得 rs![顧客名] = Me![顧客名] rs![受注日] = Date '受注日には今日の日付を入れてます。 rs.Update rs.Close Set rs = Nothing '受注明細に追加(追加クエリを利用) SQL = "INSERT INTO T_受注明細 ( 受注ID, 商品名, 数量, 単価 ) " SQL = SQL & "SELECT " & ID & " as 受注ID, T_見積明細.商品名, T_見積明細.数量, T_見積明細.単価 " SQL = SQL & "FROM T_見積明細 " SQL = SQL & "WHERE T_見積明細.見積ID=" & Me![見積ID] & ";" CurrentDb.Execute SQL DoCmd.OpenForm "受注伝票フォーム", , , "[受注ID]=" & ID End Sub これで、受注伝票、受注明細に追加して、ついでに受注伝票フォームを開きます。
補足
コードを含めた詳しい説明有り難うございます! >>逆にT_見積明細とT_受注明細は主キーとなってるIDのみ違うだけで >見積IDと受注IDも異なりますよね。 すみません、主キーは同じで、仰る通り見積IDと受注IDが異なります。 -------------------------------------------------------------- '受注明細に追加(追加クエリを利用) SQL = "INSERT INTO T_受注明細 ( 受注ID, 商品名, 数量, 単価 ) " SQL = SQL & "SELECT " & ID & " as 受注ID, T_見積明細.商品名, T_見積明細.数量, T_見積明細.単価 " SQL = SQL & "FROM T_見積明細 " SQL = SQL & "WHERE T_見積明細.見積ID=" & Me![見積ID] & ";" CurrentDb.Execute SQL -------------------------------------------------------------- すみません、この記述で複数の明細をコピーできるのでしょうか? (疑っているとかいうわけではなく、While等の繰り返し処理って 必要なくとも可能なのでしょうか?)
お礼
有り難うございます! SELECTの例、すごくよく分かりました。 ネットで調べていても、同じように記述するとは書いていましたが なぜ、これだけで複数のレコードが追加されるのか、までは 書いておらず、四苦八苦していたところでした。 このレスを頂いたことで、悩んでいた問題が一気に解決しました。 で、本題のメインフォームとサブフォーム内の複数レコードのコピーですが 先のレスと合わせて試したところ、希望した動作になりました! (受注IDはMAXで取得できました。) 本当に有り難うございますm(_ _)m