Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1243 / 2272 ツリー ←次へ | 前へ→

【8051】変数におけるnullの扱い kyou 06/6/26(月) 11:26 質問[未読]
【8052】Re:変数におけるnullの扱い クロ 06/6/26(月) 11:37 回答[未読]
【8053】Re:変数におけるnullの扱い 追伸 クロ 06/6/26(月) 11:55 発言[未読]
【8055】Re:変数におけるnullの扱い kyou 06/6/26(月) 14:07 お礼[未読]
【8054】Re:変数におけるnullの扱い Gin_II 06/6/26(月) 12:27 発言[未読]
【8056】Re:変数におけるnullの扱い kyou 06/6/26(月) 14:11 お礼[未読]

【8051】変数におけるnullの扱い
質問  kyou  - 06/6/26(月) 11:26 -

引用なし
パスワード
   WinXp
Access2002です。
strSQLをクエリで次のように作り、strCDがnullには
問題なく全てのレコードが表示されます。

-------------------------------------------
SELECT T_工事台帳.工事番号
FROM T_工事台帳
WHERE (((T_工事台帳.工事番号) Like '*' & DLookUp("営業所コード","WT_設定マスタ","pk='1'") & '*'));


でも以下のようにモジュールに書くと
strCDがnullの場合は
”nullの使い方が不正です”というメッセージが出てしまって動きません。
strCDへの代入する式の問題だと思うのですが
お分かりの方がいらっしゃいましたらお教え下さい。

-------------------------------------------
Public Sub PS_個別原価管理表作成()

Dim strCD As String
Dim strSQL As String

strCD = DLookup("営業所コード", "WT_設定マスタ", "pk='1'")

strSQL = "INSERT INTO WT_個別原価管理表 ( 工事番号 ) " & _
     "SELECT T_工事台帳.工事番号 " & _
     "FROM T_工事台帳 " & _
     "WHERE (((T_工事台帳.営業所コード) Like '*' & " & strCD & " & '*'));"

DoCmd.RunSQL strSQL

End Sub

【8052】Re:変数におけるnullの扱い
回答  クロ  - 06/6/26(月) 11:37 -

引用なし
パスワード
   こんにちは

>     "WHERE (((T_工事台帳.営業所コード) Like '*' & " & strCD & " & '*'));"

"WHERE (((T_工事台帳.営業所コード) Like '*" & strCD & "*'));"
でどうですか?

※strCD が Null だったらすべてを表示

【8053】Re:変数におけるnullの扱い 追伸
発言  クロ  - 06/6/26(月) 11:55 -

引用なし
パスワード
   処理をキャンセルしたいのなら
strCD = DLookup("営業所コード", "WT_設定マスタ", "pk='1'")

If IsNull(strCD) Then
 MsgBox "対象がありません"
Else
 strSQL = "INSERT INTO WT_個別原価管理表 ( 工事番号 ) " & _
     "SELECT T_工事台帳.工事番号 " & _
     "FROM T_工事台帳 " & _
     "WHERE (((T_工事台帳.営業所コード) Like '*" & strCD & "*'));"

DoCmd.RunSQL strSQL
End If

とかでしょうか?

【8054】Re:変数におけるnullの扱い
発言  Gin_II  - 06/6/26(月) 12:27 -

引用なし
パスワード
   >strCDがnullの場合は
>”nullの使い方が不正です”というメッセージが出てしまって動きません。
>strCDへの代入する式の問題だと思うのですが
>お分かりの方がいらっしゃいましたらお教え下さい。

これの直接の原因は、
>Dim strCD As String
String 型の変数に、Nullを代入しようとしているからですね。

Nullを扱えるのは、Variant 型です。

【8055】Re:変数におけるnullの扱い
お礼  kyou  - 06/6/26(月) 14:07 -

引用なし
パスワード
   ▼クロ さん:

"WHERE (((T_工事台帳.営業所コード) Like '*' & " & strCD & " & '*'));"
>
>"WHERE (((T_工事台帳.営業所コード) Like '*" & strCD & "*'));"

>※strCD が Null だったらすべてを表示


期待通りに動きました。
ありがとうございます。
 " の使い方が初心者にはとても難しいと思います。
変数は""の外に出して
""内にある"は'に変えなければならないのですね。
ご丁寧なご指導有難うございます。

【8056】Re:変数におけるnullの扱い
お礼  kyou  - 06/6/26(月) 14:11 -

引用なし
パスワード
   ”目から鱗”でした。
ご指摘頂いて気がつきました。
Nullを扱えるのは、バリアント型でした。
変数をバリアント型にして
SQL文を少し変えたら期待どおりに動きました。
どうもありがとうございます。

1243 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078226
(SS)C-BOARD v3.8 is Free