• ベストアンサー

アクセス2013で自前の自動採番をする時の主キーの

アクセス2013で自前の自動採番をする時の主キーのデータ型を現在、十進型の18桁にしています。 他の人達は、自前の自動採番をする場合、テキスト型でするという質問を他のサイトで見かけた事がありますが、数字で自動採番処理を自前で作成する場合は、どのデータ型が宜しいのでしょうか? よろしくお願いします。

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

  • ベストアンサー
回答No.2

 Microsoft は、オートナンバーの主キーの型を長整数(Long型)にしています。その理由は、整数(Intege型)についで処理速度が速いからです。キーの命は、なんと言っても処理速度。とは言っても、社員テーブルなんかは整数(Intege型)で十分間に合う訳です。でも、私は、そのように細かく使い分ける時代は終わったと思っています。なんでもかんでも主キーは長整数(Long型)で押し通しても問題ないかと思います。ただ、DECIMAL型を用いる意義はほとんどないと思いますよ。

superwonderful
質問者

お礼

ご回答ありがとうございました。 とても完結で明快なご説明で、迷わず、主キー、外部キーは全部長整数型にしているところです。 ありがとうございました。

その他の回答 (1)

回答No.1

Access だと通常は Long型でしょう。 理由1、Integerでは心もとない。 理由2、Microsoft のサンプルは Long。 理由3、テキスト型では検索速度が落ちる。 理由4、テキスト型では並び替えに問題が起きる。 理由5、テキスト型では領域を多く使う。 採番そのものは、テーブル「採番台帳」とのワンアクセスです。ですから、その処理速度と型との関連は問題にはならないでしょう。でも、その後の主キーとしての機能を発揮する点ではテキスト型には大きな問題があるのではないでしょうか?で、何ゆえに[十進型の18桁]なんでしょうか? >Decimal は、すべての数値型の中で最もパフォーマンスの低いデータ型です。 (by Microsoft)

superwonderful
質問者

補足

ご回答ありがとうございます。 十進型というのは、他のサイトでそれを薦めているところがありましたので、それにしただけです。そこにある説明では、桁数指定と、小数点以下、以上の指定もできるという説明がありました。自動採番には関係ないことかもしれませんが。スピードの点でいうと、Longの方が良いということでしょうか。 Long型というのは、Accessのテーブルの数値型の「フィールドサイズ」のところで言うと、「長整数型」でよろしいのでしょうか。 また、他のテーブルの主キーとリレーションする外部キーも、当然同じデータ型のLong型にしたほうが良いということになりますか?(一応確認のため) よろしくお願いします。

関連するQ&A

  • Accessで自前の自動採番処理で採番テーブルを

    Accessで自前の自動採番処理で採番テーブルを作り、その採番テーブルに格納してある最後の主キーのNO.を取得して、それに1加算したものを、新規レコードの主キーの自動採番処理結果として設定するやり方を考えていますが、その場合に 1) 複数レコードにエクセルなどから複数行データをコピーして貼り付けた場合には、採番がうまくいくのでしょうか?行かない場合には、その対処策はありますでしょうか。 2) 一行、または、複数行を削除した場合には、採番は既に登録済みの最後のNo.から自動採番するようになると思いますが、通常のアクセスのシステムでは、このような挙動で宜しいのでしょうか? ご回答のほうよろしくお願いします。

  • 自前の採番処理をするとリレーションが

    自前の採番処理を作成するのが初めてなので質問したいのですが 自前の採番処理をしてオートナンバー型を主キーで使用しないようにすると、リレーションが、参照整合性のところが設定出来ません。自動連鎖更新など。 これは、普通のことでしょうか? あと、MainとSubのFormがある場合、Subフォームでの自動採番処理はどのようにすれば良いでしょうか? よろしくお願いします。

  • ACCESS+SQL Serverで主キーを自動採番する

    ACCESS+SQL Serverで主キーを自動採番する ACCESSを独学で勉強を開始しているものです。 顧客管理のようなものを作りたいと思っているのですが、 オートナンバーではない主キー(顧客コード)を設定しているテーブルがあります。 顧客コードの構成はアルファベット1文字+数字8桁です。 そのうち、数字は西暦2桁+月2桁+日2桁+下2桁は連番です。 ACCESS2007プロジェクトで、SQL Server 2005 Express Editionへ接続しテーブルは作ってあり、既に顧客データが10件ほど入っています。 新規に顧客データを追加する際に、必要事項を入力し、登録ボタンを押した段階で顧客コードを自動生成し、重複チェックし、採番したいと考えています。 アルファベットは必要事項入力時に入力済み、日付もその日の日付を6桁設定し、とりあえず「01」と下2桁を採番して、現在のデータに同じものがないかチェックします。 そして、同じものがあれば「01」+1を繰り返しながらチェックしていくというようなコードはどのようにすればいいでしょうか? わかりづらいとは思いますが、よろしくお願いします。

  • 自前採番処理について

    Access2013で、自前で採番処理をスル場合 以下のどちらが正しいでしょうか? 1) フォームの保存ボタンで、採番管理テーブルを参照して、現在の主キーのID番号を取得して、それに+1したものを採番管理テーブルに保存し、エラーがなければ、画面にセットして保存。 2) フォームのレコードソースのID番号の最大値を取得して、それに+1加算したものを採番管理テーブルに保存し、エラーがなければ、画面にセットし保存。 1) 2)どちらも、採番管理テーブルに+1した番号を保存する時にエラーが起きたら、画面は Me.Undoする。 よろしくお願いします。

  • 自動採番について

    初心者です。 Access2000で銀行管理DBを作っています。 (1)テーブルを入金用と出金用それぞれに作成 (2)データ入力用フォームもそれぞれに作成します。 入力にあたって入力番号を自動採番にしたいと考えてますが、番号の構成は数値10桁で、"年" + "月" + "連番"の組み合わせにしたいのです。例:2003070001 入金用と出金用それぞれ別に入力番号をつけます。 これを実現するために「採番テーブル」を別に作成しなければいけないようですが、 (1)採番テーブルの定義の方法 (2)入力フォームで自動採番するためのVBA記述の方法 についてアドバイスいただけないでしょうか? よろしくお願いします。

  • 自動採番

    エクセルで申請があったものに対して、フォーマットのある 箇所に採番をしなければいけませんが、毎回打ち込むのは 大変です。 「○○○-070724○」「三桁の数字-yymmdd○(連番)」 (最初の三桁の数字のものに対して連番/ex”123″のものが 070724に3件発生した時に123-0707241→123-0707242→ 123-0707243となるように採番したいですが、いい方法は ないものでしょうか?○○○の部分はジャンルで、多数 存在します。 せめて「○○○-yymmdd○」の「-yymmdd○」の部分だけ でも出るようになれば楽になります。CONCATENATE関数で 「CONCATENATE("-",TODAY(),・・・」で出来ないものかと 試していますが、TODAY関数5桁数字が出てきてしまいます。 自動採番のやり方もわかりません。 自動採番出来るスタンプみたいな事はエクセルで出来ませんか? わかる方がいらっしゃいましたら、教えてください。 よろしくお願いします。   

  • Microsoft Accessで自動採番をさせたい。

    いつも大変お世話になっております。 アクセスでの質問です。 フィールドに「管理ID」があって、ここに8ケタのコードが自動採番されるようなしくみにしたいと考えています。 この管理IDは8ケタで、採番の仕組みは以下の通りです。 (1)「アイテム分類」というフィールドに入った製品によって頭2桁が決まる。 例)野菜・・・YA   果物・・・KU   鮮魚・・・SE (2)入力しているのが06年07月だったら次の4桁は「0607」になる。 ここまでで、頭の6ケタ「YA0607」などまでが決まる。 最後の2桁は、その月に発生している情報の連番をつけていきたい。 例) 06年07月に1番目に採番されたデータ→YA060701 06年07月に5番目に採番されたデータ→YA060705 という具合に・・・ これにはたくさんの要素がつまっています。 要素(1) 採番するフィールド以外のフィールド(アイテム分類)を見て、頭2文字を決めること。(ただし、規則はありますので、DBで表すことはできます) 要素(2) 現在のDATEから、年と月だけ4桁拾うこと 要素(3) 過去に発生しているレコードを抽出・カウントし、最後の数字の+1になる番号をつける ということです。 上記のようなことが可能なのでしょうか? 分かりましたら、できるだけ具体的に教えてください。よろしくお願いします。m(_ _)m

  • Accessで指示書番号の自動採番

    入力フォームで指示書番号が自動採番され、テーブルにも保存されるようにするための方法を教えていただけないでしょうか。 テーブル:T_指示書 フィールド:指示書番号 フィールドはテキスト型で、番号の構成は8桁の番号で "年(二桁)" + "月(二桁)" +"部署番号(一桁、固定の数字)"+ "連番(三桁)" (例:09091001) という感じで、 年月が変われば、連番が001になるようにしたいです。 どなたか、ご教授いただければありがたいです。 よろしくおねがいします。 Access2002 winXP

  • access 請求番号の自動採番

    まったくわかりません! よろしくお願いします。 仕様環境 WinXP  access2002 顧客管理のシステムを作っています。 テーブル 顧客テーブル(主キーは顧客番号 テキスト型) 請求テーブル(主キーは請求番号 テキスト型) 明細テーブル(主キーは明細番号でオートナンバー ダミーみたいな感じで使っています。) そしてリレーションシップで顧客テーブル(1)→(多)請求テーブル(1)→(多)明細テーブルになっています。 顧客情報を入力するフォームを作りました。 主キーは顧客番号(テキスト型,入力モードON,インデックス いいえ)で 他のテキストボックス(例えば名前)に何かしら文字を入力すると自動で顧客番号を採番してくれます。 例:0001 0002 0003~ そしてそのフォームから請求書作成フォームに飛ぶように 「請求書作成ボタン」を作り、顧客情報も一緒にひっぱっていってくれる 請求書作成フォームを作りました。(入力したばかりの情報も最新の情報で更新してくれます。) ・・請求書作成フォームはサブフォームを使い3つのテーブルからなっています。・・ 親フォーム:顧客テーブルから。 子フォーム:請求テーブルから。 孫フォーム:明細テーブルから。 主キーは請求番号で(テキスト型,入力モードON,インデックス はい(重複なし)) 他のテキストボックス(例えば請求日)に何かしら入力すると自動で請求番号を採番してくれます。 例:A0001 そこで問題なのですが、顧客情報は入力する度、次々自動で採番してくれるんですが、 請求番号は一番最初のレコードの”A0001”だけ採番してくれて、 新しいレコードで請求書を作ろうとテキストボックスに文字を入力すると「型が一致しません」というエラーが出ます。 ○ エラー内容 アクションエラーの実行 条件 true アクション名 値の代入 引数 [請求番号],Format(DMax("請求番号","請求マスタ")+1,"A0001") マクロは・・(参考書を参考にしています、マクロ名:自動採番マクロ) ------------------------------------------------- 条件 : DCount("請求番号","請求テーブル")=0 アクション : 値の代入 アイテム  : [請求番号] 式     :"A0001" ------------------------------------------------- 条件    : ... アクション : マクロの中止 ------------------------------------------------- アクション : 値の代入 アイテム  : [請求番号] 式     : Format(DMax("請求番号","請求テーブル")+1,"A0001") ------------------------------------------------- となっています。 念のため、主キーの入力モードを切り替えたり、式の"A0001"を単純に"1"にしたりしましたが、 請求番号はエラーが発生します。 原因がまったくわかりません。 よろしくお願いします!

  • Access 主キーの変更について

    調査データの集計、蓄積用のDBを制作しております。 制作しているDBは主キーに県コードが含まれています。 そのため、調査データの住所に変更があるとコードを変えなければなりません。 AccessでのDBはほぼ完成しており、今からコードの形態を変更することは避けたいです。(もともと古い独自のDBのデータを流用しています。) 現在、主キーに県コードが含まれていますが、それとは別に県コードフィールドを設けています。 ※コードの形態 (先頭の二桁又は一桁が県コード、コードは4桁又は5桁) 例   主キー 北海道 1001 東京  13199 沖縄  47001 新規のデータを入力する際に主キーを入力しているのですが VBAの知識がないので県コードは個別に入力しています。 住所が変わり県が変更になった場合主キーを変更する必要が あるのですが一対多でリレーションシップをいくつもしてあり サブフォームなども使用してます。 主のフォームで主キーを変更した場合、関連付けられたレコードの主キーも変更されるようにしたいのですが可能でしょうか?