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

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

選択クエリの結果を反映させる

Access2013です。 伝票番号を自動採番したいのですが、下記の条件からできないでしょうか? Data部とアプリ部でデータベースを分割しています。 Data部データベース:受注テーブル(伝票番号、明細番号・・・) アプリ部データベース:受注_tmpテーブル(構造はData部データベースの受注テーブルと同じ) アプリ部データベースに受注テーブルをリンクしています。 受注テーブルの伝票番号の最大値にプラス1した結果を受注_tmpの伝票番号にセットして 追加クエリでリンク元の受注テーブルを更新したいです。 受注テーブルをクエリ処理した結果(最大伝票番号+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

  • SQLクエリでデータベースが壊れる?

    AccessアプリでSQL Serverデータベースを更新しています。 データベースをODBCデータソースとして登録して、AccessdeそのODBCデータソースへのリンクテーブルを作っています。 データベースが何回か壊れたのですが、AccessVBAから発行したリンクテーブルへのSQLクエリでデータベースが壊れるようなことはあるんでしょうか? あるとしたら、そのクエリを発行すると必ず壊れると思うんですが・・・。 同じAccessアプリを使っても、データベースが壊れない環境もありますし・・・。 データベースが壊れた原因がわからなくて困っています。 Windows 7、SQL Server 2008 R2 Express です。

  • メイン・サブフォームの内容を更新クエリで更新したい

    お世話になります。 現在、 tb受注日報(親)、tb受注伝票(子)で、受注伝票をサブフォームという形で組み込んだ【受注日報フォーム】と tb作業表(親)、tb作業表明細(子)で、作業表明細をサブフォームという形で組み込んだ【作業表フォーム】 があります。 【受注日報フォーム】上にあるコマンドボタンのマクロに、親同士、子同士での追加クエリを設定し、ボタンを押せば【受注日報フォーム】に入力した内容を【作業表フォーム】に反映させられるようにしています。 この要領でコマンドボタンを押せば以前に入力した【受注日報フォーム】の更新内容を【作業表フォーム】に反映させられるようにしたいと考えています。 そこで、親同士、子同士で更新クエリを作ってみた結果、親同士の更新は大丈夫でしたが、子同士の更新が一番目のレコードしか更新されませんでした。 更新クエリの抽出条件 親 フィールド 「識別番号」(オートナンバーです)   テーブル 「作業表」   抽出条件 [forms]![受注日報]![識別番号] 子 フィールド 「受注伝票番号」   テーブル 「作業表明細」   抽出条件 [forms]![受注日報]![受注伝票Sub].[form]![受注伝票番号] ちなみに親同士の追加クエリの抽出条件に使用した主キーは「識別番号」とは別の番号で、オートナンバーではなく、最大値に+1するやり方で振っている番号を使用していて、子同士の主キーは追加クエリも更新クエリもおなじ[受注伝票番号]を使用しています。 抽出条件かこの主キーの設定が問題なのかなあと思いますが、わからないのでどなたかご回答宜しくお願い致します。

  • フォームで入力した内容をクエリに反映させる方法

    Accessについて教えていただければと思います。 会社のシステムのデータベースにリンクし、Accessのツールを作っています。 複数のテーブルでクエリを作り、フォームに条件指定し表示させるところまで進んでいます。(DLookUpを使っています。) このフォームに、非連結のテキストボックスを追加し、条件入力で表示された内容に、テキストボックスで入力した内容を合わせ、テーブルもしくは、クエリに保存しておきたいのですが、うまくいきません。 構成は、 Aテーブル:伝票番号、得意先 Bテーブル:伝票番号、枝番、数量 ABクエリ:伝票番号、枝番、数量、得意先 Cフォーム:伝票番号+枝番を入力し、数量、得意先を表示      配送個口数をテキストボックスに入力 Cフォームのすべての項目をのちに呼び出せるように保存しておきたいのです。 配送個口数を入力すると、枝番に関係なく、同じ伝票番号〈複数〉に登録。という形は(一時)できたのですが、枝番で絞り込めず困っています。 VBAもあまり得意ではないので、わかりやすくご指導いただければと思います。 どれだけの情報が必要かも分からないので、とりあえず、この状態で投稿いたします。 長くなりましたが、よろしくお願いいたします。

  • ACCESS2000 更新クエリで文字を追加・変更したい

    ACCESS2000のマクロでCSVファイルをインポートし、Excelに出力しています。 そこで途中に更新クエリを使い、文字の追加・変更を行いたいのですが何故かうまくいきません。。。 【テーブルA】 フィールド/受注番号(910004292) 【テーブルB】 フィールド/出荷番号(910005232)/製造番号(910005451) 【テーブルC】 フィールド/受注番号(910005232)/製造番号(910005451)/納期(1021) 受注、出荷、製造の各フィールドは先頭に"0"を追加したいです。 910004292→0910004292 納期は2009/10/21となるように、現在の西暦(できれば自動)/と3桁目にスラッシュを入れて、yyyy/mm/dd形式にしたいです。 更新クエリで フィールド:受注番号 テーブル:テーブルA レコードの更新:"0"&[受注番号] と入力してやるとうまくいきました。 同じように横のフィールドに フィールド:受注番号 受注番号 ・・・ テーブル:テーブルA テーブルB ・・・ レコードの更新:"0"&[受注番号] "0"&[受注番号] ・・・ と各テーブルの全てのフィールドを入力して更新すると、 レコードに物凄い数の"0"が追加されてしまいます。 例:0000000000000000910004292 何度も繰り返しているようなのですが、なぜなんでしょうか? 更新クエリを別々に作ればそれぞれうまくいきました。 ひとつのクエリに複数のテーブルのフィールドを入れると駄目です。 また、納期について1021→2009/10/21にうまく変更する方法はありますでしょうか? 分かりにくくて申し訳ありませんが宜しくお願いいたします。

  • ACCESSクエリーについて

    ACCESSクエリーについてですが、複数列、行が ある顧客テーブルがあり、そのデータテーブルには、 伝票番号がレコード毎にふられています。 このレコードはお客様によっては、 複数行となることもあります。 その場合は、お客様に同じ伝票番号が 複数行にわたってふられるケースも あります。 目的はクエリーで伝票番号の先頭の 行だけを引っ張りたい、です。 単に伝票番号だけを引っ張るだけであれば、 簡単にプロパティの固定値をはいに変えるだけ でできますが、伝票番号が複数存在することが ありえるなかで、伝票番号の先頭のみの 行のみ抽出させることは可能でしょうか。

  • Accessのクエリについて

    いつもお世話になっております。 Accessクエリについて、教えてください。 退職者の作ったMDBなのですが、ODBC経由でSQLServerに接続をしています。 リンクテーブルをはっているのですが、ここでよくわからないことがあります。 データベースウインドのクエリにたくさんのクエリが登録されているのですが、 そこでクエリの対象になっているテーブルがかならずしもリンクテーブルでは ないということです。もちろん、SQLServerには存在しているのですが、 私の理解レベルだとリンクテーブルでもないのに、クエリでデータが取得できて いることが不思議です。 詳しい人にはなんでもないのでしょうが、お分かりの方がおられましたら お教えください。

  • access クエリで集計した数値を別クエリで使いたい

    access2003で2000ファイル形式で以下のものを作っています。 テーブル「A」(フィールドは登録番号(主キー)、 書名) 「B」(登録番号(主キー)、 書名) がある。Aの「登録番号の最大値」(100とする)をクエリ(クエリ名「集計クエリ」)で集計して得た。 テーブルBの登録番号(1~30とする)を更新クエリで(1+100 ~ 30+100)に更新したい。そこでデザインビューで登録番号フィールド(テーブルB)の「レコードの更新」欄にビルダーで「[B]![登録番号]+[集計クエリ]![登録番号の最大値]」と入力して実行したら 実行できなかった。(仕方ないので「[B]![登録番号]+100」として実行したら更新できた。)今後もあるので「集計クエリ」で得た値を直接呼んで、更新クエリを実行したいのだが・・・。 わかりにくい質問で恐縮です。ご理解頂けたならば、ご教授ください。

  • Accessクエリ 複数条件での更新クエリ

    Access初心者でございます。 テーブルには、受注番号と商品IDフィールドがあり、 以下のような構造になっています。 配送ID  受注番号  商品ID 5     1548315   11147 5     1548315   11146 5     1549647   11146 5     1551248   25587 5     1551248   16475 この中で、11147と11146の商品IDの両方を含む受注番号を抽出し、その配送IDを5から6に更新したいと思っています。 集計クエリを咬ませると更新できなくなるので、DSumであれこれ試してみたのですが、うまくいきませんでした。 どうかご教授のほど、よろしくお願いいたします。

  • accessでテーブルのリンクでクエリに反映させる方法を教えてください

    accessでテーブルのリンクでクエリに反映させる方法を教えてください。 現在2つのエクセルデータを比較するクエリを作成したのですが、 比較するデータが大量にあり、テーブルのリンクでクエリに反映させたいのですが、 うまくいきません。 よろしくお願いします。

  • クエリ上でのデータ更新

    Accessのクエリで、クエリ実行した画面の抽出されたデータ上で、データの書き換え・更新ができるクエリと、「このレコードセットは更新できません」と左下に記載されてしまい更新できないクエリがありますが、この2つにはどんな違いがあるのでしょうか? おそらく、元になっているテーブルの何かの設定が違うのだろうかと思うのですが、それがよくわかりませんので投稿しました。 よろしくお願いいたします。

専門家に質問してみよう