- ベストアンサー
ACCESSで必要なデータの抽出について
いつもお世話になっております。よろしく御願いします。 OS→XP バージョン2002 入金リストを作っております。入金済の所は日付が入り入金の所は無記入です。その状態で入金済だけ抽出し、抽出したものだけでオートナンバーを振るっといったことは出来ますか? どうのような方法で行ったらよいのか教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
追加説明です。 Nullとは、「空白」ということで、データの入っていないことです。「Is not Null」と書けば、“空白でない”という意味になります。逆に「Is Null」と書けば、検索条件の部分が“空白”のレコードを抽出できます。 クエリーをデザインモードで作ったら、データシートビューで表示させて内容を確認してみてください。 データシートビューで“Error”というセルが表示されているフィールドがあれば、そこが原因と思われますので、どんなフィールドかまた情報をいただければ、お力になれると思います。
その他の回答 (6)
- hi_max
- ベストアンサー率61% (8/13)
>No4です。 多分、追加先のテーブルのフィールドのデータ型があっていないのではないでしょうか?文字列型と数値型が合っているか、そして、数値型の中には「長整数型」、「整数型」、「倍精度浮動少数点型」などがあります。すでに作成してあるテーブルとの整合性があるかどうか確認してみてください。 後は、NULL値を数値型フィールドに追加しようとしてないかってことかなぁ…
- O_cyan
- ベストアンサー率59% (745/1260)
>レコードでキー違反 追加するテーブルに主キーや重複なしのインデックスの設定をしたフィールドはありますか? あれば設定を無くしてください。 もしくは、追加クエリをいったんテーブル作成クエリに変えて一度クエリを起動しテーブルを作りそのテーブルにオートナンバー型のフィールドを追加するようにして下さい。それが出来たらクエリを元の追加クエリに変更して再度試してみてください。 そうすれば大丈夫のはずですが。
お礼
お礼が遅くなってすみません!(休みが続いたもので・・)原因はやはりインデックスの設定が入っていました。本当にどうもありがとうございました。
- hi_max
- ベストアンサー率61% (8/13)
ACCESSを利用して、こんな風に処理してみるのは、どうでしょうか? 1.最終的に作成したいテーブルを作成する。デザインモードで必要なフィールドを作成します。一番最初のフィールドは“管理連番”等の名前で、オートナンバー型にします。その後、当初入力してあるテーブルのうち必要なフィールドを作成します。 2.次に、入力してあるテーブルに基づくクエリーを作ります。抽出したいフィールド(1で作成したテーブルのフィールドに対応するもの)をいれて、「入金済み」フィールドの抽出条件に“is not null”と入力します。そのクエリーを追加クエリーにします。追加先のテーブルには、1で作成したテーブルを指定します。各フィールドがきちんと割り当てられているか確認して、保存します。 3.2のクエリーを実行すれば多分ご希望のデータが抽出されたテーブルができます。 追伸;もし、この処理を何度もされるようでしたら、1のテーブルの雛型を作っておきます。たとえば、追加先のテーブル名が「T_入金済み確認」だとしたら、「T_入金済確認TMP」といったものを作ります。 クエリーを走らせる前に「_入金済確認TMP」をコピーして、「T_入金済み確認」を作り(以前にあったものは別名にするか削除)、その後クエリーを実行します。 フォームを作ることができ、ボタンイベントでモジュールを記述できるようでしたら、以下のようにするとよいかもしれません。 Private Sub "ボタン名"_Click() Docmd.Setwarnings False Docmd.CopyObject "新しく作るテーブル名" , acTable , "コピー元テーブル名" Docmd.OpenQuery "クエリー名" Docmd.Setwarnings True End Sub
補足
教えて頂いた半分までは・・出来たと思ってますが続きでつまってしまいました。 「追加クエリですべてのレコードを追加できません。 型変換エラーのため0個のフィールドをNullに設定しました。また、5件(今試して5件だけ入力してます)のレコードでキー違反、0個のレコードでロック違反、0件のレコードで入力規則違反が発生しているため、レコードを追加できませんでした。」 との内容です。初めてAccess使って作るのでNull等の言葉で本を見たり検索もしたのですが・・何を指しているのか分かりません。もしよろしければ、続けて教えてください。
- O_cyan
- ベストアンサー率59% (745/1260)
入金リストのクエリを作り日付のフィールドの抽出条件に Is Not Null で日付が入っているレコードだけ抽出できます。 入金リストと同じテーブルを一つ作っておいてオートナンバー型のフィールドを追加して作ります。そのテーブルに前記のクエリを追加クエリに変えこのテーブル名を指定します。クエリを実行すればテーブルに入金済みの日付が入ったレコードだけ追加されオートナンバーが振られます。
補足
入金済の日付だけの抽出はできるようになりました。 追加クエリを行った後、追加しますか?の表示後エラーがでてしましました・・。続けでですがよろしければ おしえてください。 エラーメッセージ 「追加クエリですべてのレコードを追加できません。 型変換エラーのため0個のフィールドをNullに設定しました。また、5件(今試して5件だけ入力してます)のレコードでキー違反、0個のレコードでロック違反、0件のレコードで入力規則違反が発生しているため、レコードを追加できませんでした。」 との内容です。 もともとIdをふったテーブルを使っていました。消して作り直してもみましたがうまくいきませんでした。
- gadd3
- ベストアンサー率46% (211/451)
ご質問の具体的な意味がよくわからないので申し訳ないのですが、抽出したものを別のテーブルに書き込んでも良いという状況なのでしたら、以下のようにしてみてはいかがでしょうか? (1)まず日付が存在する(入金済み)レコードを抽出する選択クエリを作る。 (2)それをもとに、オートナンバーフィールドを持つテーブルにレコード追加する、追加クエリを作る。
お礼
ありがとうございます!! 多分・・教えて頂いた所までは進んだようです。
- r-bridge
- ベストアンサー率35% (6/17)
エクセルに貼り付けて、空白セル表示でコピー&ペースト をしてナンバーをふるっていかがでしょう? 手間ですかね?
補足
すばやいご回答ありがとうございます。 入金に締め切りがありません。またこの後、入金があった所のデータを使って(すでにACCESSでデータを作ってあります。)書類を作る作業をしますので、出来ればACCESSで出来ないかと思ったのですが・・・。
お礼
お返事が遅くなり申し訳ありませんでした!やっと出来るようになりましたが、何度も実行するとデータが重複していくようなので、NO4で教えて頂いた続きをがんばっている最中です。SQLの仕組みが分かっていないので本とにらめっこの状態です・・。どうもありがとうございました