アプリ版:「スタンプのみでお礼する」機能のリリースについて

EXCEL VBAでADOを使ってEXCELファイルよりデータを取得しています。
その際のSQL実行結果が上手くいきません。


'Excel のバージョン 2003 SP3

'データ項目名
'ID,名前,,,,,,,,,,,長文1,長文2,,,,削除フラグ,削除日時,更新日時 ←こんな感じで20項目

上記の「削除フラグ」の値を抽出条件にしています。
文字列の項目で、''、' '、'1'などの値があります。
'1'が入っているデータは削除された古いデータなので、抽出対象外にしたいです。

mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ <> '1')"
Set adoRS = adoCON.Execute(mySql)
Debug.Print mySql

上記を実行すると、対象データはあるのに取得できません。
実行時エラーになることはなく、処理は正常に終了します。

mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ = '1')"
だと、「削除フラグ」に'1'が入っているデータが取得できます。

mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ != '1')"
これを試しましたが、構文エラー:演算子がありません となります。


SQL文が悪いのか、「削除フラグ」のデータが悪いのかわかりません。

解決していただけなしでしょうか?

A 回答 (1件)

こんにちは。



>上記を実行すると、対象データはあるのに取得できません。
取得できない対象データの削除フラグは、空のセルになっていると想像しました。

空のセルはNullという値になっています。
条件「削除フラグ <> '1'」は、真になりません。

>mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ <> '1')"
以下のようにすると、取得できなかった対象データも取得できると思います。
削除フラグの条件に OR 削除フラグ IS NULL を追加しています。
mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ <> '1' OR 削除フラグ IS NULL)"


確認に使ったサンプルプログラムを添付します。
確認に使ったサンプルデータを画像添付します。

Dim oConn As New ADODB.Connection
Dim adoRS As ADODB.Recordset
Dim mySql As String

'エクセルファイルに接続
With oConn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Extended Properties").Value = "Excel 8.0"
.Open "E:\test\q6209009.html\test.xls"
End With

mySql = "select * FROM Sample1 WHERE (名前 LIKE '%山%') AND (削除フラグ <> '1' OR 削除フラグ IS NULL)"
Set adoRS = oConn.Execute(mySql)

Do Until adoRS.EOF
Debug.Print adoRS!名前; adoRS!削除フラグ
adoRS.MoveNext
Loop

'接続を閉じる
oConn.Close


はずれていたらごめんなさい。
よろしくお願いします。
「EXCEL VBAでADOを使ってEXC」の回答画像1
    • good
    • 0
この回答へのお礼

画像まで付けていただいて、ありがとうございます。
サンプル通りで正常に取得できました。

Nullを考慮しなければならないのですね。
勉強になりました。

Nullを考慮して他の所も組みなおします!

お礼日時:2010/09/26 21:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!