
いつもお世話になっています。
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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
このQ&Aを見た人はこんなQ&Aも見ています
-
Null同士の結合
その他(データベース)
-
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
アクセスで入力したデータの順番が変わってしまいます
その他(ビジネス・キャリア)
-
-
4
Access:クエリーにて集計後に文字列結合したい。
その他(データベース)
-
5
【ACCESS】リレーションを組んでいるフィールドがNullの場合
その他(プログラミング・Web制作)
-
6
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
7
IIF関数の使い方
Visual Basic(VBA)
-
8
ADOでレコードを閉じるタイミング。。Access2000/VB6/Win2K
その他(データベース)
-
9
AccessにおいてフィールドがNULLの値を0に変換するには
その他(データベース)
-
10
エクセル: セルの枠を超えて表示
Excel(エクセル)
-
11
アクセスVBAのMe!と[ ]
Access(アクセス)
-
12
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
13
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
14
OR関数
その他(Microsoft Office)
-
15
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
16
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
17
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
18
クエリの一つのフィールドのIIF関数の限界は14個ですか?
Access(アクセス)
-
19
Accessを使って日付を比較したい
その他(Microsoft Office)
-
20
Accessのコマンドボタンの立体化について
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クリスタルレポート(8.5)の書式...
-
NULLを含む文字列の結合で...
-
AccessのDAOでフィールド名を配...
-
Access 2010で実行時エラー3061
-
アクセスでADO 並べ替えが適用...
-
VB.NETのOleDbCommandにて文字...
-
AccessVBAで他テーブルのデータ...
-
SmartyでMySQLに登録したテンプ...
-
accessでフィールド追加のあと...
-
オートナンバー型を抽出条件に...
-
(ADO)フィールド名から取得し...
-
クリスタルレポートで文字列の...
-
エクセルVBAでSQLを使ってアク...
-
ACCESS VBA Parametersで or演...
-
PHP&MySQLでチェックボックスの...
-
レコード数
-
C#でbyte配列から画像を表示さ...
-
SQLを発行とは?クエリの作成と...
-
手動または分散トランザクショ...
-
vba フィルター 複数条件 3つ以...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INT64対応のprintf系関数はあり...
-
accessでフィールド追加のあと...
-
2つ目のレコードの値を取得す...
-
Accessのフィールド名に半角括...
-
DataTableに特定のフィールドが...
-
テーブルのデータ型の変更がで...
-
ACCESSデータベースにV...
-
クリスタルレポート(8.5)の書式...
-
クリスタルレポートで文字列の...
-
日付と文字列を条件としてDLook...
-
Access 2010で実行時エラー3061
-
ADOでNullフィールドの抽出
-
Access クエリで変数を参照する...
-
NULLを含む文字列の結合で...
-
AccessのDAOでフィールド名を配...
-
アクセス ADO Null以外のレコ...
-
クリスタルレポートで0件時の表示
-
FTPサーバーから受信したファイ...
-
C#で変数名の取得
-
c言語で自分のホームディレク...
おすすめ情報