[VB6] 特定カラムのNULLチェックについて

このQ&Aのポイント
  • Visual Basic 6.0にて、データベースからデータを取得し、スプレッドシートに表示する際に、NULLの列を表示せずに前の列を詰めて表示させる方法を教えてください。
  • 方法1として、データ取得時のSQL文に条件を加えてデータを取得する方法があります。方法2として、全レコードを取得した後にVisual Basicで各列の値をチェックする方法があります。どちらがより良い方法でしょうか。
  • 他にも、NULLチェックを行うための方法があれば教えてください。
回答を見る
  • ベストアンサー

[VB6] 特定カラムのNULLチェックについて

お世話になります。 現在、Visual Basic 6.0 にて 開発をおこなっております。 下記内容で DBからデータを取得し、スプレッドシートに データを表示させる必要があるのですが、 実現方法がよくわからず、非常に困っています。 ・スプレッドシートに取得データを表示する際、 すべての行において データがNULLの列に関しては、 その列自体を表示せず、その次の列を前につめて表示させる まず、上記を実現しようとする場合、 1. データ取得時のSQL文にて、上記内容を満たすようなデータを 取得する 2. 全レコードを取得後、Visual Basic側で構造体に格納した各列の値を 保持した変数の中身をひとつひとつNULLかどうかチェックをする の2つの方法を考えているのですが、1回で条件を満たすようなSQL文が 作成可能なのかどうかも、まだはっきりしていません。 また、上記1、2のどちらがより良い方法なのかも、よくわかりません。 (あるいは、それ以外の方法があれば、それをぜひ知りたいのですが、) どなたか、大変申し訳ないのですが、ご教授願えますか?

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

エクセルVBAである列の全行が空白の場合、以右のセル範囲全体を左詰めする方法がある(列削除)。 今はエクセルへのデータを持っていくにはどうしているのか質問に書いてないが、その後の処理で、それを出来なくもない。 列はRangeオブジェクトなのだが、それ全体を削除するのは、エクセルでその操作をしてマクロの記録を採ればエクセルでどういうコードになるか判る。 あとは例えばアクセスなどからエクセルへ入って、そこで簡単な処理をするコード例をGoogleででも勉強のこと。 基本的には前段階(データをエクセルにセットしたあと)で取得したエクセルの各オブジェクト名を、必ず各オブジェクトの限定に使うことである。 開発者グループの一員ならそれぐらい知っている仲間が居るだろう。 SQLで、結果的にあるフィールド全体が空白の場合はそのフィールドを表示しないというSQL文例は見たこと無いが、私が知らないだけの恐れがある。それだけ採り上げて、簡潔に表現して別質問してはどうです。 ADOのようにレコード処理するなら、全レコードを判定して、そのフィールドのすべてのデータが空白なら削除したものを別ファイルとしてアウトプットすることは可能だろう。

masy0312
質問者

補足

迅速かつ丁寧なご回答をしていただき、 非常に助かります。 ご説明が不足しており、大変申し訳ないです。 改めてですが、 スプレッドシートとは、 GrapeCity社の製品であるSPREADのシートです。 このシート上へのデータ展開方法については、 製品ヘルプ情報を確認しながら対処します。 SPREADシートへのデータ展開までの流れとしましては、 ORACLEのテーブルからデータを抽出して取得し、それを一旦、 VB側で用意した構造体のメンバに格納しておき、 各メンバに格納されたデータがNULLか否かをひとつずつチェックする方法で 対処するしかないかと、 ご回答いただいた内容をふまえた上で考えております。 やはり、 1回のSQLで条件を満たしたデータを取得し、特に列削除などを まったく意識することなく、単純にデータをスプレッドに展開するだけで良い、 というのは難しそうですね。

その他の回答 (1)

  • tossy2011
  • ベストアンサー率17% (3/17)
回答No.2

>1回で条件を満たすようなSQL文が >作成可能なのかどうかも、まだはっきりしていません。 使用するSQLも取得条件も分かりませんのでなんとも言えませんが 基本的にはSQL文を工夫するほうが早くなると思います。 ただしSQLの記述の仕方によってはそれほど差が出ないこともあります。 vb側でデータのNULLチェックを行う以外にもデータの整合性チェックなど行いエラー内容を吐き出すなどの処理があるならばvb側でやってもよいと思います。

関連するQ&A

  • NULLのみを保持した列を除外したレコード取得

    お世話になります。 現在、Visual Basic 6.0 にて 開発をおこなっております。 下記内容で DBからデータを取得し、スプレッドシート(GrapeCity社の製品)に データを表示させる必要があるのですが、 実現方法がよくわからず、非常に困っています。 ・スプレッドシートに取得データを表示する際、 すべての行において データがNULLの列に関しては、 その列自体を表示せず、その次の列を前につめて表示させる まず、上記を実現しようとする場合、 1. データ取得時のSQL文にて、上記内容を満たすようなデータを 取得する 2. 全レコードを取得後、Visual Basic側で構造体に格納した各列の値を 保持した変数の中身をひとつひとつNULLかどうかチェックをする の2つの方法を考えているのですが、1回で条件を満たすようなSQL文が 作成可能なのかどうかも、まだはっきりしていません。 また、上記1、2のどちらがより良い方法なのかも、よくわかりません。 (あるいは、それ以外の方法があれば、それをぜひ知りたいのですが、) どなたか、大変申し訳ないのですが、ご教授願えますか?

  • null→数値にするには?

    何度も質問してすみません。 NULLが格納されているフィールドに 「0」や「1」といった値を入れる為には どういうINSERT INTO文をPHP内で記述すれば宜しいでしょうか? pg_field_is_nullを使ってみたのですが イマイチ値を変更する事ができません。 また、SQL文で「NOT NULL制約」という言葉があるのを知ったのですが、 ALTER TABLE文でテーブルを作る時に、 各フィールドにはnullではなく、「0」を最初から格納したい場合は どういった記述をすれば宜しいでしょうか? 宜しくお願い致します。

  • Null値を入れるには?

    初歩的な質問です! SQLでデータの更新をかけたいんですが、データがNull値でもUPDATEできるようにしたいんです。 DB側でNull値の許可をしていたら問題なく動くと思ったんですが…現在Access2000を使用しています。 そこで、VBAを使ってSQLでUPDATEをかけようとしているんですが、Null値を受け取ってくれません。 受け取ってくれないため、操作ができなくなってしまいました(/_;) そこで、Null値のUPDATEの方法を教えてください。 よろしくお願いします。

  • Javaでoracleから抽出したデータについてnullのもの

    Javaでoracleから抽出したデータについてnullのもの タイトルの通りですが null値のデータを空文字で抽出したいのですが 現在resultsetにデータ格納して JavaはgetString("項目名")で抽出しています そうするとnull値ではなく「null」という 文字列でかえってきます stringですので当たり前かもですが 「null」ではなく「」という全く空のデータを 取得したい場合 Javaでget~で取得できるものがあれば 教えてください

    • ベストアンサー
    • Java
  • Null値が入れられない

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

    • ベストアンサー
    • MySQL
  • SQLServer7.0で、SELECT文で列を抽出する ※Nullと0の条件について

    SQLServer7.0で、SELECT文で列を抽出する際なんですが、 列A 列B --------- 1  Null 2  Null 3  1 ↑のテーブルから、列Aの1、2だけを抽出するSELECT文を SELECT * FROM XXX WHERE 列B <> 1 と作成したのですが、うまく動作しません(汗) データが一件も取れないのです。(列B:tinyint型、Null許容) テーブル内のデータをNull→0にして、同SELECT文で抽出すればうまくいったのですが。。 Nullデータを、<>XX という条件で取得することはできないんですかねえ・・・。 それとも、テーブルの設定か、条件の記述方法がまずいんでしょうか。 どなたか、ご存知あればアドバイスをお願いします。

  • NULLを認識させる方法

    Access2000を使用しています。 SQL文について質問です。 AとBの、内容が似たテーブル (フィールド項目は全く同じで入力内容が若干違います) それぞれの'数量'というフィールドを比べ、 内容が一致する件数を出力したいというのが目的です。 方法としてはCOUNTを使用し、 (A.数量)(B.数量)を結合&比較して一致しないレコードが NULL意外のものを件数に数えるようにしたいのです。 しかしIS NULLやIS NOT NULLを使うとTRUEかFALSEが 渡ってしまいます。 そこで質問なのですが、 COUNTを使って、 データが一致しないところがNULLであることを認識させ、 カウントからはずすには、どのようにSQLを作成したら よいでしょうか?

  • NULL行の取得について

    教えてください。 Aはトランザクションテーブルです。 A 列1 列2 1 1 2 NULL 3 2 Bは種別テーブルです。 B 列1 列2 列3 aaa 1 あああ1 aaa 2 あああ2 aaa 3 あああ3 select A.列1 B.列3 from INNER JOIN B ON ( (A.列2 = B.列2 or A.列2 is null) and B.列1 = 'aaa') 上記のSQLを実行すると、 A.列1が2のような、列2がNULLだと、 1 あああ1 2 あああ1 2 あああ2 2 あああ3 3 あああ2 となってしまいます。 望む形としては、 1 あああ1 2 null 3 あああ2 としたいのですが。。。 何が悪いか、教えていただけませんでしょうか。 お願いします。

  • ■一番最初に値が入っている(Nullでない)カラム名を取得するには?

    ■一番最初に値が入っている(Nullでない)カラム名を取得するには? 会社の上司が、上記の条件をSQL文一つで出来るというのですが、 postgres SQLの書き方が思いつかず、大変困っています。 状況を説明します。 主に以下のようなカラムを持つテーブルがあります。 ID, 年, 月, タイプ, price_1d, price_2d, price_3d, ..., price_31d price_?d には null or 数字が入ります。 上記のような状況で、 price_1d ~ price_31d の順で最初に値が入っているカラム名を取得し、 最初に値があるのは何年何月何日と判定したいというわけです。 おまけに、タイプには 0 or 1 が入り、 その値によっては、price_?dではなく、別カラム price2_?d を見ないといけないという条件付きです。 このような条件をSQL一つで抽出することははたして本当に可能なのでしょうか? 何かしら解決の糸口となるヒントだけでも構いませんので、 何か情報を頂けると大変ありがたいです。 また、そんなの出来ません、 という情報でもいただけると嬉しいです。 宜しくお願い致します。

  • NULLが返ってこない…。

    原因がわからないため質問をさせて頂きます。 <%-- JSP <input type="text" name="name"> //名前 String name = request.getParameter("name"); Data data = new Data(); //コンストラクタをnew data.setName(name); --%> <%-- class(Bean) private String n = null; public void setName(String name){ if(name != null){ n = name; }else{ n = null; } public String getName(){ if(name != null){ return name; }else{ return name; } } --%> 値をgetParameter()メソッドで取得をして 値をsetName(name);でセットをしています。 セットした側でもし値があるのであれば その値を変数に格納。 もし値がなければnullを変数に格納しています。 しかし System.out.println(data.getName().equals("");//true System.out.println(data.getName().equals(null);//false; となりnullを返してくれません…。 このコードに何を足したらnullを返してくれるのか わかりません。 わかる方がいらっしゃいましたらよろしくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう