• 締切済み

Access オートナンバーについて

17年・18年の伝票整理をしたいと思っています。 伝票IDを、17年度分なら 17-(オートナンバー) 18年度分なら 18-(オートナンバー) のように、設定したいと思ったのですが、どんな方法があるでしょうか。

みんなの回答

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

>17年・18年の伝票整理をしたい・・ 伝票整理だけであれば17・18年度を日付のフィールドを元に年度別に抽出するテーブル作成クエリを作り別テーブルを作れば良いと思いますが。 同じテーブル構造のテーブルを用意しクエリで17年度分の伝票のレコードを抽出し日付等でソートしそのテーブルに追加します。オートナンバー型のフィールドを追加し連番を作り17-(オートナンバー)を保存するフィールドもテキスト型で追加します。 そのテーブルを更新クエリでオートナンバー型のフィールドから年度-連番を作りだし17-(オートナンバー)を保存するフィールドを更新します。オートナンバーのフィールドを[No]として17-(オートナンバー)のフィールドを[ID]・伝票の日付のフィールドを[日付](入力は西暦)とした場合。 17年度分を抽出しIDのレコードの更新欄に Format(Format([日付],"ee"),"00") & "-" & Format(Str([No]),"00000") で日付(西暦)から和暦に変換しテキストに変換、オートナンバーを00000のフォーマットでテキストに変換し間に-を入れる。 これでテーブルを更新すれば17年度分伝票の場合17-00001からの連番を振れます。日付を日付型で持っていなければMidで切り出すか単純に"17-"&Format(Str([No]),"00000")で出来ます。 18年度も同様に出来ます。 18年度の新しい伝票を入力する場合は上記の方法で18-0000?の連番を作ったテーブルを元に入力するようにすれば続きの連番を作り出せます。 DMax([No])で一番大きな連番を取得し連番(0000?)の部分を切り出して+1させて"18-"と結合した連番を新しいレコードと一緒にテーブルに保存するようにすれば出来ます。 こういう事でしょうか?

naimake
質問者

お礼

回答ありがとうございました。 分けて作るということで、少し難しいような気がしますが、ぜひやってみたいと思います。

回答No.3

#1 です。 オートナンバーは "そのテーブルの全レコードの中で一意" であり、しかもユーザーまたは開発者が意図的に変えることができません。(最適化をすれば云々は別の話) しかも登録を途中でキャンセルしても次回採番予定の番号は 1つ進んでしまうので、歯抜け番号になったりします。 こういった理由から、私はオートナンバーを "ユーザーの目に触れる列" に使うことをお勧めしません。 私ならオートナンバーは決して一般ユーザーが見ることの出来ない "内部的なキー" に使います。 そして伝票番号のような番号は "年番号" と "連番" の 2列を使って "表現" します。 ただし、yy-nn の組み合わせが全体の中で一意にならなくてはいけないのは確かなので、レコードの新規作成や更新の操作はユーザーが画面上で行うにしても、実際にレコードを更新する行為はプログラムの中から行うようにしています。 複数ユーザーが更新しない保証がある場合の大雑把な例として下記のようなロジックが考えられます。 ホントに大雑把ですけど。 【新規登録】 ・必要項目入力後ユーザーが登録ボタンを押す。 ・日付またはユーザーが入力した "年" をキーに、同年での最終番号を取得。 ・その番号に 1を足した番号に決定。 ・情報を ADO で登録。 【更新(番号部分もユーザー編集が可能)】 ・必要項目入力後ユーザーが更新ボタンを押す。 ・フォーム上に表示されている番号を取得。 ・編集前の番号と同じならそのまま ADO で更新。 ・違っていれば、フォーム上の番号が既に使われているか確認。 ・使われていなければ新しい番号で更新。 ・(または新しい番号で新規登録して古い番号のレコードを削除) ・使われていれば更新せずにユーザーへ知らせる。

naimake
質問者

お礼

回答ありがとうございます。 あまりデータベースに深い知識を持っていませんが、自分で調べて、教えていただいたのをやってみたいと思います。本当にありがとうございました。

noname#182251
noname#182251
回答No.2

質問があまり明快ではありませんが、取り敢えず二つのやり方 1.「伝票整理」の前処理として更新クエリを動かす 2.データの新規登録(append,insert)時に、VBAなどで値をセットする しかしご質問のようなID設定にあまり意味がないように思われます。そのようなIDがなくても、演算その他の処理時にどのようにでも扱えると思うので。

回答No.1

できません。 データを操作するユーザーが手動で意図的につける。 データを操作するユーザーがレコードを保存するタイミング(登録用のボタンを押すとか)で、VBA などによって付ける。 ってところじゃないでしょうか。

関連するQ&A

  • アクセスのオートナンバーの法則

    アクセスのオートナンバーについての質問です。 いま、1~100までのオートナンバーで付番されたIDを持った顧客データがあって 101件目を間違えて削除してしまい、その次に入力をしたデータは102番になってしまうため、 欠番を埋めるために、ここでも紹介されている、オートナンバー再設定の方法を行いました。 すると、今までついていた1~100までの番号が、どういう法則かわからないのですが順番がぐちゃぐちゃになって付番されてしまいます。 これを、1から100までの数字は変えず、最後の欠番1こ分だけ詰めて、新しいデータを101番から付番させたいのですが、どうしたらよいのでしょうか。 解決方法ご存知の方ぜひ教えてください。 よろしくお願いします。

  • アクセス オートナンバー について

    アクセス超初心者です。 年月で更新される伝票番号をオートナンバーで作成したいのですが、可能でしょうか? 例: 2010年9月4日(2010年9月の1番目の伝票) → 100901 2010年9月18日(2010年9月の2番目の伝票)→ 100902 2010年10月5日 (2010年10月の1番目の伝票)→ 101001 フィールドには日付としてyy/mm/ddで日付型で入力しています。 そこからyymmだけを認識させて、末尾の番号を連番で自動更新させることは可能でしょうか? よろしくお願いします。

  • access2007のオートナンバーについて

    access2007のオートナンバーについて こんにちは、さっそくですが質問させていただきます。 accessの勉強を始めた者ですが、 オートナンバーを指定したフィールドと、その他の必要な項目の フィールドから成るテーブルを作成して、 オートナンバー1~3までのレコードを入力して、 オートナンバー3のレコードを削除した時、 そのあとで、レコードを追加すると、 オートナンバー4のレコードが作成されるのですが、 このレコードをオートナンバー3のレコードとして、 作成することはできるのでしょうか? そのような設定ができろのかどうか、もしできるのであれば、 その方法や、参考になるサイトなど、なにぶん初心者ですので 教えていただけないでしょうか。 よろしくお願いします。

  • Access2003オートナンバーを任意の値に

    Access2003で、オートナンバーでID番号の管理(主キー)をしています。 このID番号の他に、10桁の数値でプロジェクト管理したいと思っております。 オートナンバーを基に、別IDを作成する方法を教えてください。 なお、この10桁の数値は、先頭の4桁がプロジェクト番号として使用し、 後ろの6桁はオートナンバーのIDと同じ数値となります。 ======================================== (例)  [ID]     [ID2]   1    1001000001   2    1001000002   3    1001000003   〃       〃 ======================================== 下記のURLを参考にしてやってみたのですが、追加クエリを実行しても、 なぜか、オートナンバーフィールドへ追加することができませんでした。 ※追加クエリ実行エラーで、「型変換エラーのためnullに設定しました」となります。 http://www.accessclub.jp/samplefile/samplefile_145.htm お手数お掛けしますが、宜しくお願い致します。

  • アクセスのオートナンバー

    XPのアクセスを使っています。 オートナンバーに主キーが設定されています。 データを入力するとオートナンバーが「1・2・3~」と振られていきますが、もし「3」のデータを消去すると「1・2・4~」となります。 私的にはツメて「1・2・3~」となって欲しいのですが無理なのでしょうか?オートナンバーとはそういうもの? アクセス超初心者ですのでよろしくお願いいたします。

  • アクセスのオートナンバーの再設定について

    サイトの中をいろいろ調べてみたのですが、いまいちピンとこなく質問をさせてもらいます。 先日、アクセスで作ったデーターが全部飛び、バックアップデーターを拾ってからおかしくなりました。 具体的には、ID(オートナンバー設定)、文書件番号(テキスト)で作っています。 オートナンバーがぐしゃぐしゃになったので、文書件番号と同じ値を振りたくてやったのですが、途中から番号が飛びます。 具体的には、オートナンバーが1~64まで並んだら、次に102~150までならんで、また65~101まで並んで、151からというようになってしまいます。何度オートナンバーを削除して作り直しても同じ結果になります。主キーとして使っています。文書件番号と同じ値を振りたいのですが、どうしたらよいのでしょうか?

  • Accessのオートナンバーを1から始めないには

    Accessのオートナンバーを設定すると1から自動的に始まるのですが、最初に4桁の数字入力して始めることは可能でしょうか。 それとも、この最初の番号を指定して、ひとつずつ数字が自動的に増える設定はオートナンバー意外でおこなうのでしょうか。

  • オートナンバーの初期値が22になっています!

    新規にデータを入れようとテーブルを作成して、オートナンバー型のID列を作ったら初期値が22から始まっています。 1から始まるように設定したいので方法を教えて下さい。

  • ACCESSのようなオートナンバー

    EXCELの質問なんですが、ACCESSのようなオートナンバーは可能なんでしょうか?    A     B 1|管理番号   船番 2| 1    第1船 3| 2    第2船 4| 3    第3船 5| 4    第1船 ・ ・ ・ 例えばBの縦の列に船番という列があって、この番号は年度管理 で、4/1から第1船という風にカウントされていき、年度が終わるとリセットされ翌年度から、また第1船となります。 で、質問はAの縦の列に、年度は関係なくカウントされていくオートナンバーみたいな関数ってあるのでしょうか? わかりにくい質問ですが、頭の良い方お願いします。 Bの列に番号を入力するとAの列に自動的に入力されるというのが希望です。

  • ACCESS2000でオートナンバーを1から付けたいのですが

    ACCESS2000のテーブルで新規に作ったときはオートナンバーフィールドが1からになるんですが、何度かレコードの試験入力や削除を繰り返しているうちに、頭の番号が増えていきます。テーブルのデザインで、オートナンバーをテキスト型にして、新しいオートナンバー型行を挿入しても1からになりません。なにかよい方法はないでしょうか?