![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんにちは。閲覧ありがとうございます。
私はAccess初心者です。
勉強と実用をかねて個人用の「家計簿」をWindows7のAccess2010で作成しております。フォームを使用し、費目を記録して、ゆくゆくは集計なども行いたいと考えています。
いくつかの失敗に当たりながらどうにか形はできたのですが
『インデックスまたは主キーには、null値を使用できません。』
というエラーが出てきてしまい、これがどうしても解決できないでいます。
初心者があやふやな言葉を並べるより、現物を見ていただいた方が早いと思うので、以下に私が作成中の「家計簿rev2.accdb」をアップロードしておきました。
http://www1.axfc.net/uploader/so/2884464.zip
(稚拙で見難いことこの上ないかもしれませんが、初心者ゆえご容赦ください・・・)
仕様としましては、フォームの「Fmain家計簿DB」に、「レシートNo、購入日、種類ID、費目、値段、個数、店舗ID、その他」と入力して、最後に次のレコードに移れば、レコードが一つ記録されるといった具合(のはず)です。
各テーブルの主キー以外には「空文字列の許可を"はい"」「値要求を"いいえ"」「インデックスを"いいえ"」に設定してあります。
オートナンバー型を使用しているのはテーブルの「Tmain家計簿DB」の主キーのみです。
また、「フィールドとキーが一致しているレコードをテーブルで探すことができません」というエラーが出るのを回避するため、こちらの質問を参考にさせてもらい外部結合の設定をしてあります。
(http://detail.chiebukuro.yahoo.co.jp/qa/question …)
そして、フォームに想定通りのデータを入力すると『インデックスまたは主キーには~』のエラーが出てしまいます。
せめてどこにnull値が入っててエラーが出てるのかを表示してくれたらいいのですが・・・
以上になります。長文お読みいただきありがとうございました。
こんな簡単なdbの作成でお手上げ状態になるとは情けない限りです・・・
どなたか、『インデックスまたは主キーには、null値を使用できません。』の解決策をご教示いただけるとありがたいです。
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
続きです
(http://detail.chiebukuro.yahoo.co.jp/qa/question …)
このサイトのベストアンサーはテーブル間の結合に
1、完全一致
2、一方のテーブルの全てと他のテーブルに一致するレコードが無ければその項目が空白
仮にAテーブルとBテーブルとして
2-1.Aテーブルの全てとBテーブルに一致するレコード
2-2.Bテーブルの全てとAテーブルに一致するレコード
この3通りの結合があるという事ですね
フォームに想定通りのデータを入力すると『インデックスまたは主キーには~』のエラーが出てしまいます。
せめてどこにnull値が入っててエラーが出てるのかを表示してくれたらいいのですが・・・
---------------------------------------
こちらで再現出来ません。
何度も修正なさっているうちに変なデータが残ってしまったのでは
おそらく主テーブルがAテーブルで複テーブルがBテーブルとして
Bテーブルに無い項目がAテーブルの主キーにリレーションが設定しているものと思われます。
2-2の設定でクエリーを作成してクエリーを開くとAテーブルの項目が空白のレコードが表示されると思われます。
リレーションシップの編集は、クエリーをデザインビューで開き
【リレーションシップのラインを右クリック】⇒【結合のプロパティー】⇒【結合の種類選択】⇒【OK】
-----------------------------------------
レシートNo、購入日、種類ID、費目、値段、個数、店舗ID、その他
は1つのレコードの項目ですか
種類ID、店舗IDはそれぞれ種類テーブル、店舗テーブルが有りますね
種類テーブルには食材費、教養費等費用項目のほか給料、受取利息等収入項目
預金等財産項目、借入金等負債項目を想定されてますか?
目的は家計簿ですね、少なくとも現金出納帳の項目は必要です。
金額項目が値段の一項目だけではどうかと思います。
レシートNo.はどうかと思います。伝票No.として
自分なりにデザインしたものを添付します。
![「Access 「主キーにはnull値を~」の回答画像5](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/b/1349162_5497e5e658191/M.jpg)
ご回答ありがとうございます。
詳しく解説してくれた上、改善案まで提示してくださるとは、本当にありがとうございます。デザインの方、ありがたくそっくりそのまま真似させてもらいます。
皆様それぞれ、とてもためになるご回答をくださり、ベストを選ぶのが心苦しくありますが、繰り返し疑問に答えてくれ改善案も提示してくれたchayamatiさんの回答をベストアンサーに選ばせてもらいます。皆様、この度はどうもありがとうございました。
No.4
- 回答日時:
主キーの制約事項で自分が体験したことに
一つはあなたも確認済みの空白が許されない
もう一つが修正が効かない事です。
前回も記述しましたが、主キーをオートナンバーにすることにより
フォーム設計でフィールドを省略できるので入力項目も一つ減り
データの入力の効率化につながります。
No.3
- 回答日時:
主キーはリレーショナルデータベースの根幹になる重要な部分です。
そのため制約が必要です。NULL値もその一つでしょう
※他のレコードをこのレコードにリレーションを設定すると主キーの内容が必要と
思われますが、テーブル設計でルックアップのコンボボックス設定することで
解消します。
またフォーム及びクエリー及びレポードにオートナンバーの主キーを配置する必要もないです。
主キーに変な意味付け(年+ナンバート)せずに全てオートナンバー型にして
全てお任せにしてしまいましょう
意味付けは「勘定科目名」のほか「勘定科目コード」等フィールドを追加します。
勘定科目コードは勘定科目毎の合計とリストの順序を一定にするため必要です。
勘定科目名、勘定科目コードは重複してはダメですね、この設定もテーブル設定で
フィールドプロパティーのインデックスで設定できます。
テーブルで設定した内容は次の、クエリー、フォーム、レポートに反映されます。
回答ありがとうございます。
オートナンバー型の主キーと意味付けされたコードを分ける、という発想はできませんでした。そのような設計の方が障害耐性や拡張性などがあるのでしょうか?こちらもまたとても良い勉強になりました。ありがとうございます。
No.2
- 回答日時:
新規レコード入力に際し、「TレシートNo」の「レシートNo」がNULLだからです。
#1さんが回答しているように、「TレシートNo」と「Tmain家計簿DB」の関係が1:nの関係であり
現状のフォームで入力したデータは「Tmain家計簿DB」をへの追加は可能ですが、
「TレシートNo」へのレコード追加ができません。
回答ありがとうございます。
私が作ったフォームだと、確かに「レシートNo」のみ多側から1側へレコード追加しようとしています。そしてまさにココが原因だったのですね!原因が判明しとてもスッキリしました。本当にありがとうございます。
No.1
- 回答日時:
データベース用語では、TレシートNO と Tmain家計簿DB は「一対多の関係」にあるといいます。
このようなデータを同時に入力する場合は、Accessでは通常は一側をメインフォームとして、多側をサブフォームとして埋め込みます。
リレーションシップを設定して、フォームウィザードで両方のテーブルからフィールドを選択すると、途中で、「サブフォームがあるフォーム」と「リンクされたフォーム」という選択肢が出てきます。これで、「サブフォームがあるフォーム」を選択すると簡単に作成することができます。それを元に自分好みのデザインに変更したらどうでしょうか。
ちなみに「リンクされたフォーム」を選択すると2つの独立したフォームになり、一側のフォームからボタンで多側のフォームを呼び出すことになります。
お早い回答ありがとうございます。
「サブフォームがあるフォーム」を早速試してみました。なるほど、このようなやり方もあるのですね。こちらのフォームもなかなか良さそうです。勉強になりました。ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。特にものすごく怒られたときとか、とんでもない損害を与えてしまったときとか…。
-
インデックスまたは主キーにはnull値を使用できません
Access(アクセス)
-
インディックスまたは主キーには、Null値を使用で
その他(Microsoft Office)
-
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
-
4
ACCESS2007 フォーム 「バリアント型でない変数にNull値を代入しようとしました」エラーの
SQL Server
-
5
エクセルのデータをアクセスにインポートしたいのですが、フィールド名として使用できないデータがあるようで・・
Access(アクセス)
-
6
Access レコードを追加できません。テーブル’○○’の結合キーがレコードセットにありません。
Access(アクセス)
-
7
Access で項目にブランク(スペース)を入力出来ないのですが?
Word(ワード)
-
8
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
9
Accessでコードを入れると名前がでるようにしたい
Access(アクセス)
-
10
Accessのテーブルのフィールドに式を入れる方法
Access(アクセス)
-
11
ACCESSで縦に並んだテーブルデータを横に並べることは出来ますか?
Access(アクセス)
-
12
ACCESS VBAの実行時エラーなんですが
PowerPoint(パワーポイント)
-
13
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
14
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
15
Acccessで2つのテーブルから1つのフォームをつくりたい
Access(アクセス)
-
16
アクセスでテーブル入力用のフォームを他のテーブルのレコードを参照しながら入力するには
Access(アクセス)
-
17
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
18
アクセスのテキストボックスの初期値を空白に
Access(アクセス)
-
19
アクセス: フォーム上で計算した数字をテーブルに保存したい。
Access(アクセス)
-
20
ACCESS クエリの抽出条件で全てを抽出したい
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSでテーブルにあるチェッ...
-
Access 「主キーにはnull値を...
-
Accessのテーブルを開いたとき...
-
ACCESS2000 更新クエリで文字...
-
ACCESSでの関数について
-
レコード件数が0件なら印刷を...
-
フォーム内のデータをすべて更...
-
Accessで、フォームに情報を入...
-
Accessの最大レコード数
-
差込印刷での全角表示について...
-
SQL文で パラメータが少なすぎ...
-
日付型のフィールドに空白を入...
-
アクセスで追加した項目に全て...
-
Access フォームからの入力結...
-
エクセルデータをワードで差し...
-
Accessで、1つの項目に複数の...
-
ACCESSのクエリで抽出条件「ま...
-
エクセルにおける「フィールド...
-
アクセスでの、フォームとテー...
-
アクセスのエラー「クエリには...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クエリの結果が文字化け(Access...
-
ACCESS2010 フィルタ後のエク...
-
ACCESSでテーブルにあるチェッ...
-
Accessの最大レコード数
-
Accessでレポート内の繰り返し...
-
Accessで、フォームに情報を入...
-
Access 「主キーにはnull値を...
-
ACCESS2000 更新クエリで文字...
-
ACCESSでの関数について
-
Accessのテーブルを開いたとき...
-
アクセスでの追加クエリでのエ...
-
Accessのオートナンバーについて
-
ACCESSでのひとつ前レコードの...
-
フォーム内のデータをすべて更...
-
access レポートで表示されな...
-
文字を含むIDの自動採番
-
アクセス レポートの行数を固...
-
レコード件数が0件なら印刷を...
-
アクセスのレポートで、空白行...
-
データシートビューをコピーす...
おすすめ情報