
いつもお世話になっています。
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 などをいろいろ試してみましたがダメでした。
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
ANo.1です。
たびたびすみません。SQL文、少しですが間違ってました(汗)
SELECT a, b, IIF(ISNULL(a),'',a) & IIF(ISNULL(b),'',b) AS tempAB FROM tableC
ですね(^^;
あと、ついでに、IIF関数については調べてもらえば分かると思いますが、
VBのIIF関数と同じようなものです。この関数はAccess特有のもののようです。
あと、SQL文での文字列連結は、Accessの場合は & らしいです。
SQL Serverだと + で、Oracle等だと || (キーボードの\の部分の縦棒2つ)です。
+しか受け付けないのは、VBで扱うデフォルトのDBがSQL Serverとなっている
感じなので、そのせいでしょうか?
これについても、あくまで最終的に処理するのは、使用するDBですので、
DBに合わせた書き方をしておきましょう。
K-Sogacchiさん 再度のご教示有り難うございます。
少し急いでいたので、ダミーの列を設け、そこにNULLデータをダミー文字列に置き換えたものを作り、結合して急場をしのいでおりました。
(この現象の問題については結果は問題なくいけております)
ただかなり複雑な操作をやらせておりますので、あちらこちらの修正が必要なことから頭を抱えていたところでした。
ISNULLを使いテストさせていただきましたが、お陰様で目的を達成することが出来ました。
実はさっきテストしたとき、シングルクォーテンションとダブルクォーテーションとを間違える初歩的なミスを犯していたため、SQLに叱られていたことも判明いたしました。
文字列の連結 + は、結果的にSQL Server2005に移行する予定なので問題はないところでした。(他のDBはそちらで動かしています)
ありがとうございました。
今後ともよろしくお願いいたします。
No.3
- 回答日時:
ANo.1です。
申し訳ありません、本を見て回答したのですが、大事な部分を見落としてました(汗)。
Accessの場合、ISNULLでの「変換」は不可能らしいです。NULLかどうか検査出来るだけです。
で、お急ぎのようですので、ヒントだけ出して考えて欲しかったけど、
答えとなる形のSQL文を書いておきます。
後ででも、内容を調査してみてください。
SELECT a, a, IIF(ISNULL(a),'',a) & IIF(ISNULL(b),'',b) AS tempAB FROM tableC
…みたいな感じです。
で、確かにデータアダプタ構成ウィザード等で設定しようとすると怒られてしまいますが、
そのまま設定完了してしまいましょう。
結局、最終的にSQL文がOKかどうか判断するのはDBであり、SQL文はあくまで
文字列ですので(パラメータとか使うと一概にタダの文字列とは言えなくなるけど)、
無理やり文字列を設定して、データアクセスしてDBが受け取ってくれれば万事解決です。
No.2
- 回答日時:
SQLは詳しくないのですが、
select a, b, a & iif(b is null,"",b) as tempAB
from tableC;
とかでできないですかね?
あと、気になったんですけど、
SQLとしては一般的なのかもしれないのですが(SQL詳しくないので)、
NULLがあり得るフィールドbを"+"演算子で結合って違和感を感じますね。
私個人の意見なんですけど、"&"演算子てつないだ方が結合って感じがします。あくまで私見ですけど・・・
atomvanishさん こんにちは。
早速有り難うございます。
VB.NET2003 クエリビルダ中にこの記述をすると
「引数リストのエラー ISが認識できません」という内容のエラーが起こります。
また、文字列の結合は一般的には仰るように & でしょうけれど、この例(ドットネットのクエリビルダ)では + にしないとエラーになります。
引き続きよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Null同士の結合
その他(データベース)
-
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
-
4
【ACCESS】リレーションを組んでいるフィールドがNullの場合
その他(プログラミング・Web制作)
-
5
Access:クエリーにて集計後に文字列結合したい。
その他(データベース)
-
6
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
7
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
8
アクセスで入力したデータの順番が変わってしまいます
その他(ビジネス・キャリア)
-
9
ADOでレコードを閉じるタイミング。。Access2000/VB6/Win2K
その他(データベース)
-
10
IIF関数の使い方
Visual Basic(VBA)
-
11
Access サブフォームでの選択行の取得
その他(データベース)
-
12
AccessにおいてフィールドがNULLの値を0に変換するには
その他(データベース)
-
13
Access 1レコードずつcsvで出力したい
その他(データベース)
-
14
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
15
PreviewKeyDownイベントが2回発生する
Visual Basic(VBA)
-
16
クエリの一つのフィールドのIIF関数の限界は14個ですか?
Access(アクセス)
-
17
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
18
OR関数
その他(Microsoft Office)
-
19
アクセスVBA現在開いている全てのテーブルを閉じる
Access(アクセス)
-
20
Accessのコマンドボタンの立体化について
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSのVBAなのです...
-
Accessのフィールド名に半角括...
-
INT64対応のprintf系関数はあり...
-
クリスタルレポートの式フィー...
-
2つ目のレコードの値を取得す...
-
アクセスでADO 並べ替えが適用...
-
Access クエリで変数を参照する...
-
ACCESSデータベースにV...
-
Access レポートのフィルターの...
-
c言語で自分のホームディレク...
-
DataTableに特定のフィールドが...
-
NULLを含む文字列の結合で...
-
Access 追加クエリについて
-
クリスタルレポート(8.5)の書式...
-
accessでフィールド追加のあと...
-
日付と文字列を条件としてDLook...
-
ACCESSで日別集計をする場合
-
アクセス ADO Null以外のレコ...
-
ADOX フィールドのRequiredプ...
-
2次元のdictionary
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでフィールド追加のあと...
-
SQLで複数のテーブルと結合した...
-
INT64対応のprintf系関数はあり...
-
2つ目のレコードの値を取得す...
-
Access クエリで変数を参照する...
-
Accessのフィールド名に半角括...
-
DataTableに特定のフィールドが...
-
クリスタルレポート(8.5)の書式...
-
AccessのDAOでフィールド名を配...
-
NULLを含む文字列の結合で...
-
Access 2010で実行時エラー3061
-
日付と文字列を条件としてDLook...
-
オートナンバー型を抽出条件に...
-
2次元のdictionary
-
AccessVBAで他テーブルのデータ...
-
ACCESSで日別集計をする場合
-
テーブルのデータ型の変更がで...
-
ACCESSデータベースにV...
-
アクセスでADO 並べ替えが適用...
-
Accessの画像挿入のVBAコード
おすすめ情報