5

挿入する変数の値が Null の場合、SQL INSERT INTO は失敗します。

変数 costLab は Variant データ型です。Null 以外の値は Decimal になります。

db.Execute ("INSERT INTO budget 
(wbsid, category, capture_date, budget_date, budget_type, month_value) " & _
"VALUES ('" & wbsid & "', 'Labor', #" & importDate & "#, 
#" & monthDate & "#, 'Forecast', " & costLab & ");")

costLab を設定するコードが Null を返す場合、Null を挿入したい。しかし、値が返された場合、その値を挿入したいと思います。明らかに、null をチェックして "Null" を直接挿入する If ステートメントを作成できますが、If ステートメントを使用せずに変数を介して Null を挿入する方法があるかどうかを知りたかったのです。

4

2 に答える 2

6

ステートメントNz()を作成するときに使用できます。INSERTアプローチに似ていますIIf()が、もう少し簡潔です。

Dim strInsert As String
strInsert = "INSERT INTO budget (wbsid, category, capture_date, budget_date, budget_type, month_value) " & _
        "VALUES ('" & wbsid & "', 'Labor', #" & importDate & "#, #" & monthDate & "#, 'Forecast', " & Nz(costLab, 'Null') & ");"
Debug.Print strInsert ' <- examine the finshed statement in Immediate window
db.Execute strInsert, dbFailOnError

Debug.Print実行するために db エンジンに渡した完成したステートメントを調べる機会が与えられます。問題が発生した場合は、イミディエイト ウィンドウ ( Ctrl+g) に移動してステートメント テキストを表示できます。そのテキストをコピーして、テスト用に新しいクエリの SQL ビューに貼り付けることもできます。

于 2013-09-24T18:52:57.500 に答える
1

が Null の場合、文字どおり「null」を挿入しますcostLab

したがって、変数の代わりに SQL 文字列を連結する場合は、次のcostLabように挿入します。

IIf(IsNull(costLab), "null", costlab)

完全なクエリ:

db.Execute ("INSERT INTO budget (wbsid, category, capture_date, budget_date, budget_type, month_value) " & _
    "VALUES ('" & wbsid & "', 'Labor', #" & importDate & "#, #" & monthDate & "#, 'Forecast', " & IIf(IsNull(costLab), "null", costlab) & ");")

私は知っています...技術的には、これはステートメントIf(IIfは単に の短い形式ですIf...Then...Else) ですが、私が考えることができる最も短い形式です。

于 2013-09-24T18:48:30.697 に答える