• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:選択クエリの結果を反映させる)

Access2013の受注テーブルの伝票番号を自動採番する方法

このQ&Aのポイント
  • Access2013のデータベースで受注テーブルの伝票番号を自動採番する方法を教えてください。
  • Data部とアプリ部でデータベースを分割していて、アプリ部のデータベースに受注テーブルをリンクしています。伝票番号を自動採番する際にエラーが発生しています。
  • 受注テーブルの最大伝票番号に1を加えた結果を受注_tmpの伝票番号にセットして更新したいですが、エラーが出てしまいます。どうすれば解決できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.1

いまいちイメージがつかないのですが。。 なんとなく、アプリ部DBに常に最大伝票番号+1の番号を もっておいて、処理するときにその番号を受注_tmpに セットしてあげればいいような気がします。 クエリ名:最新伝票番号 SELECT Max([伝票番号]+1) AS 最新伝票番号 FROM 受注テーブル; ちなみにアプリ部DBのフォーム上で必要項目を入力し、最終的に 登録ボタンが押されて初めて、最新伝票番号を採番するって 感じなのでしょうか。 であれば、登録ボタンが押されたときに最新伝票番号クエリより 最新伝票番号を取得し、その番号を受注_tmpに入れてやるって 感じでしょうか。 Dim New_No As String Dim MySQL As String Dim MyDB As Database Dim Mytable As Recordset Set MyDB = DBEngine.Workspaces(0).Databases(0) Set Mytable = MyDB.OpenRecordset("最新伝票番号", DB_OPEN_DYNASET, dbSeeChanges) Mytable.MoveFirst New_No = Mytable![最新伝票番号] MySQL = "UPDATE 受注_tmpテーブル SET 受注_tmpテーブル.伝票番号 = " & New_No & ";" DoCmd.SetWarnings False DoCmd.RunSQL MySQL DoCmd.SetWarnings True 試したらとりあえずうまくいきました(最新伝票番号クエリは1レコード しか表示されないはずなので、Mytable.MoveFirstは不要かも)。 あとは受注_tmpを追加クエリで受注テーブルに追加してやればよいかと 思います。 きっともっとよい方法があると思いますが、ご参考まで。

utdx019
質問者

お礼

教えていただいた内容でできました、ありがとうございました。

utdx019
質問者

補足

先日に引き続きありがとうございます。 質問内容不備で申し訳ありません。 >> ちなみにアプリ部DBのフォーム上で必要項目を入力し、最終的に >> 登録ボタンが押されて初めて、最新伝票番号を採番するって >> 感じなのでしょうか。」    ⇒ その通りです。 >> であれば、登録ボタンが押されたときに最新伝票番号クエリより >> 最新伝票番号を取得し、その番号を受注_tmpに入れてやるって >> 感じでしょうか。   ⇒ 教えていただいた内容でトライします。  

その他の回答 (1)

  • panacon
  • ベストアンサー率31% (214/679)
回答No.2

utdx019 さんへ 同様のことをフォーム上でマクロで行っています。 (1)レコードの移動、新規レコード (2)値の代入、代入先「伝票番号」、式「=Max("伝票番号","受注テーブル")+1 値の代入は通常は見えない設定になてちるので、すべてのマクロを表示を押すと出現します。

utdx019
質問者

お礼

私のやり方が悪いのだと思います、他で解決しました。 ありがとうございました。

utdx019
質問者

補足

ご回答いただきありがとうございます。 式に同様に指定したのですが、リンク元のテーブルがフォーム上にないためかエラー(テーブルが見つからない)となります。 マクロに「テーブルを開く」を入れても、同じエラーとなります。

関連するQ&A