お世話になります。色々調べたり、実験してみたのですが、分からない点があります。
簡単でいいので、可能性のある原因を教えてください。
アクセス2003です。
■パターン1 フォームC の入力ができる
テーブルA(主キーがオートナンバー型)、その他4つのテーブル(これら5つのテーブルは、参照整合性リレーションで結ぶ)
→それらを元にクエリBを作る→クエリBを元にフォームC を作る
■パターン2 フォームC の入力ができない
テーブルA(主キーが数値型)、その他4つのテーブル(これら5つのテーブルは、参照整合性リレーションで結ぶ)
→それらを元にクエリBを作る→クエリBを元にフォームC を作る
簡単にいうと、テーブルのデータ型によって、入力可否が変わるのです。
なぜ、パターン2は、入力できないのか分かりません。
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
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
この場合、イミディエイトウィンドウでテストすれば判りますが主キーはカウントアップされないです。
※ここに示している方法は、最善とは限りません。単なる初手のやり方です。
ご回答ありがとうございます。
上のほうはなんとなく理解できたのですが、
下の部分が難しくてよく理解できません。
たくさん書いていただいたのに、申し訳ないです。
主キー制約って何ですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(データベース) accessでのフォームの連携について 2 2022/06/14 00:45
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- その他(データベース) Notion@リレーション値の取得について 1 2023/06/28 10:27
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでリストの並び順を変更...
-
最新日のデータのみ抽出するク...
-
外部MDBのリンクテーブルの...
-
ACCESSでABC判定をしたい
-
Microsoft Access 「Form」のボ...
-
アクセス 部分一致の抽出
-
アクセス2000でのリンク先...
-
Access 定員オーバーしたら入...
-
Accessで、1つのマスターを複...
-
「年」と「月」だけの日付の表...
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
差込印刷での全角表示について...
-
リンクされたテーブルのレコー...
-
ACCESSの時間帯の抽出について
-
Accessで、1つの項目に複数の...
-
アクセスのエラー「クエリには...
-
AccessのDLookUpの第3引数の値...
-
PCゲームから音声ファイルを抽...
-
今週分だけ表示させたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
最新日のデータのみ抽出するク...
-
Acccessで2つのテーブルから1...
-
テーブルに表示されているもの...
-
access vbaにてテンポラリーテ...
-
ACCESSユニオンクエリから新テ...
-
Accessのリンクされたテーブル...
-
Accessでリストの並び順を変更...
-
ACCESS テーブルを見比...
-
accessについて(超初心者です)
-
クエリで同一テーブルの複数回...
-
ACCESSでテーブルをコピーしよ...
-
アクセス 部分一致の抽出
-
accessのテーブルを閉じたとき...
-
AccessVBAで任意の複数リンクテ...
-
Accessのテーブルで、リンク?...
-
Microsoft Access 「Form」のボ...
-
access2000・・テーブルをデー...
-
アクセスVBA現在開いている全て...
-
クエリで編集できるようにした...
おすすめ情報