2017-09-09 19 views
0

を挿入し、私はエラーを取得:VBA SQL Serverのクエリ

enter image description here

私はこのコードを実行します。

Private Sub EditMethodAdd_Click() 
MsgBox ("Add Click") 

Dim rs As ADODB.Recordset 
Dim introw 
Dim strState As String 
Dim strsql1 As String 
Dim strsql2 As String 
Dim all As String 

Dim strConn As String 
Dim conn As ADODB.Connection 

MsgBox ("EditM1.Value:" & EditM1.value) 


strConn = "DRIVER=SQL Server;SERVER=CHU-AS-0004;DATABASE=RTC_LaplaceD_DEV;Trusted_Connection=Yes;" 

strsql1 = " INSERT INTO dbo.Method(MethodID, MethodClass, Category, Description, Description2, MSA, ReqType, Equipment, Location, Spec1, Spec2, Spec3, Spec4, Spec5, Spec6, PilotingYN) " 
strsql2 = " VALUES(" & EditM1.value & ", Piloting, " & EditM3.value & ", Null, Null, Null, Null," & EditM2.value & ", " & EditM4.value & ", " & EditM5.value & ", " & EditM6.value & ", " & EditM7.value & ", " & EditM8.value & ", " & EditM9.value & ", " & EditM10.value & ", " & Null & ")" 

all = strsql1 & strsql2 
MsgBox ("ALL" & all) 


Set conn = New ADODB.Connection 
conn.Open strConn 

Set rs = New ADODB.Recordset 
rs.Open all, conn 
MsgBox ("Insert Success") 

EditMethodList.Requery 

conn.Close 
Set rs = Nothing 
Set conn = Nothing 

MsgBox "Data has been updated" 
EditMethodList.Requery 

End Sub 

は、この問題を解決することができ、誰もがありますか?

私はクエリをうまく行ったと思いますが、このエラーはわたしを悩ましくしています。

コメントは非常に感謝しています。

MsgBox( "All" & all)はこの結果を示しています。 enter image description here

+0

したがって、 'all'の内容は何ですか?明らかにあなたは*クエリを細かくしなかった*、あるいはエラーを受け取ることはできませんでしたが、作成したクエリを 'MsgBox(" ALL "&all)行に表示しないことにしました。それはあなたにそれを示すコードを持っている間に、私たちはその内容を見ることができない変数を使用して構築されているので、あなたが私たちに示すつもりはないクエリで問題をデバッグするように頼んだとき、本当に役に立ちません。 –

+1

SQLインジェクションを防ぐためにパラメータを使用 –

+0

'Debug.Print all'を使用し、質問を編集して出力を含めます。 –

答えて

0

MessageBoxが示すように、間違った値9.4.5V(LCO)+ICPqwerを挿入しようとしました。

MethodIDのデータタイプは何ですか?

  • それはvarchar型だと文字列の一部として+ICPqwerが含まれている場合、それは文字列ですが、フォーマット9.4.5V(LCO) +いくつかを持っている場合、あなたは この '9.4.5V(LCO)+ICPqwer'

  • よう引用符で囲まれた文字列全体を渡す必要がありますが他の文字列 (ICPqwerに含まれています)、'9.4.5V(LCO)' + ICPqwer

  • ICPqwerが数字の場合は'9.4.5V(LCO)' + cast(ICPqwer as varchar(100))

のほかに、他のすべての値が文字列であることをも思えるし、同様に引用符で囲む必要があります。

'Piloting', 'Internal Analysis', ... 

最後の事:あなたは,,,ようで渡している「空」の値が何をしています? NULLを明示的に渡すか、空文字列の場合は''としてください。