
こんにちは。閲覧ありがとうございます。
私は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.として
自分なりにデザインしたものを添付します。

ご回答ありがとうございます。
詳しく解説してくれた上、改善案まで提示してくださるとは、本当にありがとうございます。デザインの方、ありがたくそっくりそのまま真似させてもらいます。
皆様それぞれ、とてもためになるご回答をくださり、ベストを選ぶのが心苦しくありますが、繰り返し疑問に答えてくれ改善案も提示してくれた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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
このQ&Aを見た人はこんなQ&Aも見ています
-
インデックスまたは主キーにはnull値を使用できません
Access(アクセス)
-
インディックスまたは主キーには、Null値を使用で
その他(Microsoft Office)
-
ACCESS2007 フォーム 「バリアント型でない変数にNull値を代入しようとしました」エラーの
SQL Server
-
-
4
Access2000へのインポートエラー
その他(データベース)
-
5
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
6
「バリアント型でない変数に Null 値を代入しようとしました」と、ならないようにしたい
Excel(エクセル)
-
7
ラベルとテキストボックスのグループ化を解除したい
Access(アクセス)
-
8
Access 複数条件検索の設定が上手く行きません
Access(アクセス)
-
9
ACCESSのSQLで、NULLかNULLでないかの判定
その他(データベース)
-
10
Access で項目にブランク(スペース)を入力出来ないのですが?
Word(ワード)
-
11
アクセスのテキストボックスの初期値を空白に
Access(アクセス)
-
12
Accessのテーブルのフィールドに式を入れる方法
Access(アクセス)
-
13
ACCESSのフォームからデータの追加ができない
その他(データベース)
-
14
アクセスのフィールド表示を2段にする方法・抽出の方法
Access(アクセス)
-
15
access サブフォームにリストを表示させたいが一件しかレコードが表示されない
Access(アクセス)
-
16
「フォームを作成できませんでした」
Access(アクセス)
-
17
アクセスで複数のレコード情報を1レコードにまとめる方法
Access(アクセス)
-
18
Accessのデータのインポートで重複分を排除
その他(Microsoft Office)
-
19
リレーションシップが出来ません。
その他(データベース)
-
20
最新日のデータのみ抽出するクエリを教えて下さい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS2010 フィルタ後のエク...
-
ACCESSでテーブルにあるチェッ...
-
クエリの結果が文字化け(Access...
-
Accessでレポート内の繰り返し...
-
フォーム内のデータをすべて更...
-
access IDの振り直しについて
-
45年前のレコードプレーヤを10...
-
Accessで、フォームに情報を入...
-
データシートビューをコピーす...
-
Accessでの宛名ラベル出しについて
-
Accessのテーブルを開いたとき...
-
Accessの最大レコード数
-
ACCESS 各テーブルのレコード中...
-
ACCESSでの関数について
-
Access 「主キーにはnull値を...
-
アクセス レポートの行数を固...
-
別テーブルに保存したいのですが
-
帳票フォームの自動計算
-
ACCESS2000 更新クエリで文字...
-
Accessの保存のタイミングについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クエリの結果が文字化け(Access...
-
ACCESSでテーブルにあるチェッ...
-
フォーム内のデータをすべて更...
-
Accessの最大レコード数
-
Accessのテーブルを開いたとき...
-
ACCESS2010 フィルタ後のエク...
-
Accessで、フォームに情報を入...
-
Access 「主キーにはnull値を...
-
Accessでレポート内の繰り返し...
-
ACCESS2000 更新クエリで文字...
-
Accessのオートナンバーについて
-
ACCESSでの関数について
-
アクセスでの追加クエリでのエ...
-
文字を含むIDの自動採番
-
ACCESSでのひとつ前レコードの...
-
access レポートで表示されな...
-
アクセス レポートの行数を固...
-
access IDの振り直しについて
-
Accessフォームの新規レ...
-
データシートビューをコピーす...
おすすめ情報