こんにちは。閲覧ありがとうございます。
私は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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
推しミネラルウォーターはありますか?
推しミネラルウォーターがあったら教えてください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
インデックスまたは主キーにはnull値を使用できません
Access(アクセス)
-
インディックスまたは主キーには、Null値を使用で
その他(Microsoft Office)
-
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
-
4
ACCESS2007 フォーム 「バリアント型でない変数にNull値を代入しようとしました」エラーの
SQL Server
-
5
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
6
Access レコードを追加できません。テーブル’○○’の結合キーがレコードセットにありません。
Access(アクセス)
-
7
Access で項目にブランク(スペース)を入力出来ないのですが?
Word(ワード)
-
8
エクセルのデータをアクセスにインポートしたいのですが、フィールド名として使用できないデータがあるようで・・
Access(アクセス)
-
9
Accessのテーブルのフィールドに式を入れる方法
Access(アクセス)
-
10
Accessでコードを入れると名前がでるようにしたい
Access(アクセス)
-
11
ACCESS VBAの実行時エラーなんですが
PowerPoint(パワーポイント)
-
12
「バリアント型でない変数に Null 値を代入しようとしました」と、ならないようにしたい
Excel(エクセル)
-
13
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
14
ACCESS クエリの抽出条件で全てを抽出したい
PowerPoint(パワーポイント)
-
15
アクセス: フォーム上で計算した数字をテーブルに保存したい。
Access(アクセス)
-
16
Accessのフィールド数が255しかない=業務では使えない?
PowerPoint(パワーポイント)
-
17
Access2000へのインポートエラー
その他(データベース)
-
18
Accessを開くと「排他モードじゃないので変更しても保存できない」との旨の表示が出てしまう。
Access(アクセス)
-
19
ACCESSのフォームからデータの追加ができない
その他(データベース)
-
20
ACCESS フォームからサブフォームのデータを更新・入力したい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSでテーブルにあるチェッ...
-
アクセスでの追加クエリでのエ...
-
Access 「主キーにはnull値を...
-
Accessで、フォームに情報を入...
-
Accessのテーブルのリン...
-
ACCESSでの関数について
-
ACCESSでのひとつ前レコードの...
-
Accessフォームの新規レ...
-
レコード件数が0件なら印刷を...
-
mdbの破損「データベース形式・...
-
アクセス レポートの行数を固...
-
フォーム内のデータをすべて更...
-
クエリの結果が文字化け(Access...
-
ACCESS2010 フィルタ後のエク...
-
日付型のフィールドに空白を入...
-
アクセスのエラー「クエリには...
-
差込印刷での全角表示について...
-
SQL文で パラメータが少なすぎ...
-
2つのテーブルに共通するレコ...
-
エクセルにおける「フィールド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クエリの結果が文字化け(Access...
-
ACCESSでテーブルにあるチェッ...
-
Accessで、フォームに情報を入...
-
Access 「主キーにはnull値を...
-
ACCESS2010 フィルタ後のエク...
-
Accessのオートナンバーについて
-
Accessの最大レコード数
-
ACCESSでの関数について
-
Accessでレポート内の繰り返し...
-
文字を含むIDの自動採番
-
ACCESS2000 更新クエリで文字...
-
アクセスでの追加クエリでのエ...
-
レコード件数が0件なら印刷を...
-
フォーム内のデータをすべて更...
-
Accessのテーブルを開いたとき...
-
アクセス レポートの行数を固...
-
データシートビューをコピーす...
-
ACCESSでのひとつ前レコードの...
-
mdbの破損「データベース形式・...
-
access IDの振り直しについて
おすすめ情報