2017-08-15 12 views
0

Access 2010でフォームを作成し、テキストボックス(BとC)に基づいてフォームを入力し、選択フォームにコンボボックス(A)を入力します。問題は、テキストボックスのいずれかが空のままで、「無効なNull使用」エラーが発生した場合です。私はIntegerの代わりにVariantとしてテキストボックスを暗くするとこのエラーを回避できることに気付きました。これが正しい解決策であるかどうかはわかりません。このエラーを回避するために、次のスクリプトを変更することはできますか?フィールドが空のときにNullエラーを無効にする

Private Sub ABCBoxEnter_Click() 
Dim A As String 
Dim B As Integer 
Dim C As Integer 
If Not IsNull(Me!ComboBox.Value) Then 
    A = Me!ComboBox.Value 
    B = Afield 
    C = Bfield 
    values = "VALUES (" 
    values = values & "'" & ID & "','" & A & "','" & B & "','" & C & "')" 
    SQL = "INSERT INTO ContactTable (ID, A, B, C)" 
    SQL = SQL & values 
    DoCmd.RunSQL SQL 
    Me.B.Value = "" 
    Me.C.Value = "" 
End If 
End Sub 

答えて

0

あなたはのNzを使用することができます。

values = values & "'" & Nz(ID) & "','" & Nz(A) & "','" & Nz(B) & "','" & Nz(C) & "')" 

または、より良い、私の機能CSql

+0

'Me!ComboBox.Value'が' Null'の場合、 'A = Me!ComboBox.Value'に無効なnullの使用がスローされます。ただし、' A'が 'Variant'として指定されている場合を除きます。 'A = CSql(Me!ComboBox.Value)'と 'B'と' C'の場合と同じことは、 'CSql'のときにもっと有効なアプローチになります。それで 'B'と' C'は文字列でなければなりません。 –

+0

@ErikvonAsmuth:いいえ、それは直前の_If_(上記の行)によって除外されています。しかし_CSql_への私の追加されたリンクを見てください。 – Gustav

+0

ああ、愚かな、まだ 'B'と' C'のためにtrue –

0

を実装する大きな問題は次のとおりです。あなたは値がNullときに発生するものをしたいですか。

気づいたとおり、整数と文字列にはNullを含めることはできませんが、Variantには含めることはできません。仲介変数をVariantに変更することは、あなたのコードでは大丈夫です。 Nz関数を使用して、Nullを空の文字列に置き換えるか、文字列と呼ばれる場合は0に置き換えることもできます。

アポストロフィをSQL文から削除する場合、エラーが発生し、BがSQL文にある場合はIif(IsNull(B), "Null", B)を使用する必要があることに注意してください。

関連する問題