• ベストアンサー

ACCESS2000でNULLの使い方が不正です

Access 2000 のテーブルをテキスト ファイルにエクスポートする際、フィールドに十進型のデータ型が含まれていると『引数が無効です』という既知のバグが発生します。 これを回避する為に、クエリーで、CDbl、CSng、CIntなどの関数を使用してエクスポートを行ったところ、上記現象は回避できたのですが、今度は『NULLの使い方が不正です』のエラーが発生してしまいました。 対象となる数値型フィールドに格納されているデータがNULLであることが原因のようです。 現在開発環境にて試していますが、本番環境においても、必須項目でなければ、数値型フィールドにNULLが格納されている可能性は十分考えらます。 また本番環境では現象回避のためにデータリペアすることもできません。 何か回避策があれば是非教えてください。 また、不明点などがありましたら、ご指摘ください。 宜しくお願いします。

noname#85625
noname#85625

質問者が選んだベストアンサー

  • ベストアンサー
  • laputart
  • ベストアンサー率34% (288/843)
回答No.2

クエリーのデザインで フィールド名: IIf(IsNull([元フィールド名]),0,CDbl([元フィールド名])) などとするとNullが0になります。 同様に フィールド名: IIf(IsNull([元フィールド名]),"",CStr([元フィールド名])) などとして文字列形式でエクスポートが出来ます。 これで問題がある場合は他の方法を考えますが!

noname#85625
質問者

お礼

ありがとうございます。 ACCESSのクエリーデザインで上記の、 フィールド名: IIf(IsNull([元フィールド名]),0,CDbl([元フィールド名])) を試してみました。 早速実行したところ、「パラメータの入力」ダイアログボックスが出てくるなどの問題があった為、その件で再度質問させて頂こうと思ったのですが、何度か試しているうちに、なぜか(!?)うまくいきました。 関数の設定方法などを間違えていたのかな?と思っていますが、とりあえずlaputartさんから教えて頂いた方法で作業を進めていこうと思います。 また何かあったら質問させていただくかも知れませんが、その時は宜しくお願い致します。 ありがとうございました!

その他の回答 (1)

  • palmmy
  • ベストアンサー率38% (841/2170)
回答No.1

NZ()で、nullを0にした上で、型変換してみては。

noname#85625
質問者

補足

ご回答ありがとうございます。 すいません。少し補足させていただきます。 今回、本番環境のデータバックアップのため、CSV形式でエクスポートしようとしています。 ですので、nullのデータを0に変換するなど、本番と異なるデータをバックアップするわけにはいきません。 ちなみに2年程前にACCESS97を使って、同様の処理を行っていたようですが、その時は特に問題なかったようなのです。(もしかしたら何か回避策があったのかもしれませんが。)

関連するQ&A

  • Null値が入れられない

    種別:Decimal(18,2) 属性:UNSIGNED NULL:はい デフォルト値:NULL のフィールドがあります。phpMyAdminを通じてデータを入力しております。Null値のチェックを入れれば良いのですが、空白のまま残したおいた場合には、デフォルト値であるNull値が格納されるものと思っておりましたが、空白ですと0.00に変換されてしまします。 また、同時に、スクリプトの方ではjqGridを使用しているのですが、こちらの方でデータ編集をする際には、Null値のチェックボタンはありませんので、空白のままで更新しなければなりません。上記と同様に、空白にしておくと、0.00に変換されてしまいます。 Null値を入れるためには、どのような方法があるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • NULLを含む文字列の結合で困っています。

    いつもお世話になっています。 VB.NET2003+Access2000環境です。 まず前提として、このデータベースにはユニークなフィールドがありません。(残念ながらこちらの都合では変更することはできません) 従って今まではAccessのクエリウイザードを使って文字列を結合(フィールドを結合)して、ユニークなキーを作っていました。 これを今回、VB.NETで動いているアプリの中にボタンを作り、そこからcsvファイルにエクスポートさせるような仕掛けを作ろうとしました。 ところが、あるフィールドがデータが存在したりNULLであったりするため、結合するとNULLになるデータが出現してきます。 (Accessでは結合時、NULLは無視されていたようで影響はありませんでした) これでは検索して絞り込むキーには出来ず、Accessと同じ結果が得られません。 SQL文では(というかデータアダプターに読み込ませるクエリデザイナ作成時に)どういう風に記述すればNULLがあっても区別出来るようになるのでしょうか? 簡単に言えば フィールドA と フィールドB ともにテキストタイプのデータで、BのみNULLもあり得る場合、  select a, b, a+b as tempAB from tableC というSQL文を実行した結果、tempAB が NULL だけにならない方法をご教示ください。 SELECT CASE when~end などをいろいろ試してみましたがダメでした。 よろしくお願いいたします。

  • Accessのデータ格納について

    ACCESSについて質問です。 各フィールドに値を格納する際にテキスト型の場合 フィールドサイズが50だったとすると3文字の値が格納されても データ的には50文字格納していることになると言われました。 実際に数値を3文字ならフィールドサイズを3と固定したものと比べてみたのですが あまり変わらない気がします。。。 実際のところデータはどのようにして格納されているのでしょうか? 本当にフィールドサイズに比例して格納されるのならフィールドサイズを修正しなければならないのでお願いします><

  • ゼロとNULLを区別して number_formatしたい

    環境:MySQL4.0.25 と PHP4.3.11の組み合わせで、SQLで select data1 from mytable として、取り出したdata1には、次のようにNULLとゼロと数値が 混在しています。 4334.0028 8893.212233 4334.2 <NULL> 0 2.002 9893 桁がバラバラなので、これらに number_format(data1,2) としたら、 NULLまでもが0.00と表示されてしまいます。 今回、NULLとゼロ(0.00)は区別しなければならなので、 echo ($data1 == '') ? '' : number_format($data1,2) ; としましたが、効きません。WWWでイコール3つ(===)演算子を 使えば回避できるような情報を見かけましたが echo ($data1 !== '') ? number_format($data1,2) : '' ; としても、状況変わらず。何かうまい方法はないでしょうか。 なお、SQL側で format(data1,1) とするのはナシとしてご教示いただけ ますと幸いです(data1でいろいろ計算するのでformatされた値が 出てくると誤差の原因になってしまうためです)。

    • ベストアンサー
    • PHP
  • Accessですでに入っている値をNULLにしたい場合にVBAでどのように書けばよいのでしょうか?

    Access2003とPostgreSQL8を使っています。 AccessをGUI環境としてデータリンクでテーブルを開いています。 Accessでフィールドに対してNULL(空文字でなく)をセットする方法が知りたいです。基本的に入力しなければ良いのですが、すでに入っている値をNULLにしたい場合に手で変更する方法とVBAプログラムで変更する方法が知りたいです。

  • スプレッドシートのnull表示

    win2000、vb6.0、スレッドシート3.0(文化オリエント)を使用しています。 1レコードの中から特定のフィールドだけスプレッドシートに表示し、更新できるようにしたいと考えています。 'ここまでで、レコードセットrsに1レコードセット。 Set SPR_Test.DataSource = rs SPR_TEST.col = 1 SPR_TEST.DataField = "data1" SPR_TEST.col = 2 SPR_TEST.DataField = "data2 ※上記でスプレッドシートにDBから数値型のデータを読み込んで表示しているのですが、nullのレコードが 0 で表示されています。 回避する為に、 SPR_TEST.col = 1 If IsNull(rs.Fields("data1")) Then   SPR_TEST.DataField = "" Else   SPR_TEST.DataField = "data1" End If SPR_TEST.col = 2 If IsNull(rs.Fields("data2")) Then   SPR_TEST.DataField = "" Else   SPR_TEST.DataField = "data2" End If と変更したのですが、今度はdata1,data2共にNullの場合、全くフィールドを指定していないので、他のフィールド全部表示してしまいます。 Nullは空白のまま表示したいのですが、方法はあるのでしょうか?

  • アクセス2002のエクスポートエラー

    環境:WinXP バージョン:アクセス2002 CSVデータをアクセスにインポートし、編集してエクスポートしたいのですが、「フィールド'コメント'の開始位置'32769'が有効ではありません。開始位置は32,767以内で指定してください。」というエラーが出て、エクスポートすることができません。 データ型がintになっているという知人の指摘があったので データ型はインポートの際にすべて「メモ型」にしてあり、 エクスポートするときにも確認しています。 それに、そのフィールドにはデータが入っていません。 処理するデータ量は20レコードでフィールドは69列です。 なぜ、このようなエラーが出るのかまったくわからない状態なのです。 どなたか教えてください。

  • accessのエクスポートエラーについて

    ご教授願います。 accessのテーブルをcsv形式でエクスポートすると以下のエラーが発生します。エラー回避する方法ありますでしょうか? ■エラーメッセージ テキストエクスポートウイザード !フィールドAAの開始位置'32896'が有効ではありません。開始位置は32767以内で指定してください。 データのテーブル列数は230列です。 よろしくお願いいたします

  • Access VBAで int型にnullを入れる方法について

     Access で作ったテーブルの数値型のフィールド「金額」にnullを入れたいと思い、四苦八苦しています。  以下のソースを書いたのですが、値には「0」が入ってしまい、nullが挿入されません。 Dim a As Long Dim SQL1 As String If IsNull(Me.摘要_会員番号) = True Then IsNull (a) Else a = Me.摘要_会員番号 End If SQL1 = "UPDATE 個人情報入金 SET 個人情報入金.金額 = " & a & ";" DoCmd.RunSQL SQL1  その他、a=null や、a=''をやってみたのですがこれでは入らず、String型ではないので、スペースも入りません。  nullで無くても、目で見てデータが見えない状態であればいいのですが、そのようにupdateをかける方法をしっている方、是非ご教授をお願いします。

  • アクセス のエクスポート

    1. アクセスで、モジュールやデザインを変更したフォームをエクスポートしたいのですが、エクスポート先のテーブルのデータに全く影響はないでしょうか。 2. モジュールも一緒にエクスポートされると思いますが、エクスポート先のテーブルにないフィールドなどを記述していると、エラーが発生することになるでしょうか。 3. 複数(あるいは全て)のフォームを一括してエクスポートする方法はないでしょうか。 4. 特に注意すべき点があれば、合わせて教えてください。