• 締切済み

アクセス 数値型にするとフォームの入力ができない

お世話になります。色々調べたり、実験してみたのですが、分からない点があります。 簡単でいいので、可能性のある原因を教えてください。 アクセス2003です。 ■パターン1  フォームC の入力ができる テーブルA(主キーがオートナンバー型)、その他4つのテーブル(これら5つのテーブルは、参照整合性リレーションで結ぶ) →それらを元にクエリBを作る→クエリBを元にフォームC を作る ■パターン2  フォームC の入力ができない テーブルA(主キーが数値型)、その他4つのテーブル(これら5つのテーブルは、参照整合性リレーションで結ぶ) →それらを元にクエリBを作る→クエリBを元にフォームC を作る 簡単にいうと、テーブルのデータ型によって、入力可否が変わるのです。 なぜ、パターン2は、入力できないのか分かりません。 よろしくお願いします。

みんなの回答

noname#140971
noname#140971
回答No.3

「主キー制約」は、実は、正しい表現じゃないです。 ここでは、「主キーは重複出来ないという制限」と表現すべきでした。 そういうことで誤解を与えたようです。 お詫びして表現を訂正させていただきます。

himigon17
質問者

お礼

ありがとうございました。 そういう意味だったのですね。分かりました。

すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.2

主キーとは、ユニークキー(一意)ということです。 オートナンバー型の場合は、レコードが発生すれば自動的にシーケンシャルにユニークな値が発生します。 ですから、このオートナンバー型はプログラミングの手間隙を省く上では便利。 しかし、一旦、テーブルが破損した場合の修復ではやっかいな問題の種にもなります。 採番テーブル等を利用してオートナンバー型の利用を避ける理由です。 なお、簡易的に、DMAX関数で最大値を取得し+1するという手法もあります。 小規模データベースでDMAX関数の速度とかネットワークトラフィックの混雑が問題にならなければOK。 Access は本来スタンドアローンですから、通常は、DMAX関数での管理で良いと思います。 パターン2は、そういうことでテーブルAの主キーを管理していなきゃ0が発生していたということ。 一回は入力できるでしょうが、2度目からは主キー制約に引っかかって入力不可。 ところで、パターン1でも主キー制約に引っかかっているとのこと。 ならば、先ずは、2つの簡単なテーブルで主キー管理の仕組みを確立されたがいいです。 <A> ID___Name 1____あああ <B> ID___A_ID___Name 1________1___kkk 2________1___いいい ものすごく簡単なテーブルを用意。 これで、フォームウィザードでフォーム<A>、フォーム<B サブフォーム>を生成。 当然に、主キーを管理しなきゃならんです。 Form:A Private Sub Form_BeforeInsert(Cancel As Integer)   Me.ID = Nz(DMax("ID", "A")) + 1 End Sub Form:B Private Sub Form_BeforeInsert(Cancel As Integer)   Me.ID = Nz(DMax("ID", "B")) + 1 End Sub 注意を要するのは、Nz関数を使うこと。 DMax関数は、レコードがゼロであればNull を返します。 [イミディエイト] ? Null + 1 Null この場合、イミディエイトウィンドウでテストすれば判りますが主キーはカウントアップされないです。 ※ここに示している方法は、最善とは限りません。単なる初手のやり方です。

himigon17
質問者

お礼

ご回答ありがとうございます。 上のほうはなんとなく理解できたのですが、 下の部分が難しくてよく理解できません。 たくさん書いていただいたのに、申し訳ないです。 主キー制約って何ですか?

すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.1

テーブルAの主キーを管理していますか?

himigon17
質問者

お礼

早速ありがとうございます。 主キーを管理しているというのは、どういう意味ですか? あと、質問内容が少し違ってました!申し訳ありません。 ↓ パターン1も入力できませんでした。 入力できるのは、パターン1(オートナンバー型)で、主キーを設定しない場合のみでした。

すると、全ての回答が全文表示されます。

関連するQ&A