我有一個包含insert語句的Access表單。VBA中的SQL語句錯誤
代碼工作很好,但問題,當我輸入包含一個單引號'
文本:
strSQL = "INSERT INTO student (stname) VALUES ('" & stname.Value & "')"
DoCmd.RunSQL strSQL
時stname.value = Ra'ed or ka'l
則聲明變成錯
我有一個包含insert語句的Access表單。VBA中的SQL語句錯誤
代碼工作很好,但問題,當我輸入包含一個單引號'
文本:
strSQL = "INSERT INTO student (stname) VALUES ('" & stname.Value & "')"
DoCmd.RunSQL strSQL
時stname.value = Ra'ed or ka'l
則聲明變成錯
一般我會與有關SQL注入警告marc_s同意。然而,對於在非關鍵任務數據庫一個快速和骯髒的解決方案,你不介意其他用戶可能侵入或以其它方式搞亂,你會用
strSQL = "INSERT INTO student (stname) VALUES ('" & Replace (stname.Value, "'", "''") & "')"
考慮一個DAO parameterized query其允許綁定值而無需引用附件。 Access查詢允許PARAMETERS
條款,可以與外部值綁定:
Dim db As Database
Dim qdef As QueryDef
Dim strSQL As String
Set db = CurrentDb
' PREPARE STATEMENT (STRING CAN BE A SAVED QUERY)
strSQL = "PARAMETERS [strValParam] Text(255);" _
& " INSERT INTO student (stname) VALUES ([strValParam]);"
' INITIALIZE QUERYDEF OBJECT (REPLACE EMPTY STRING "" FOR SAVED QUERY NAME AND NO STRSQL)
Set qdef = db.CreateQueryDef("", strSQL)
' BIND VALUE (SINGLE/DOUBLE/SPECIAL CHARS ALL ALLOWED)
qdef!strValParam = stname.Value
' EXECUTE ACTION QUERY
qdef.Execute
Set qdef = Nothing
Set db = Nothing
[SQL注入警報(HTTP:// MSDN .microsoft.com/en-us/library/ms161953%28v = sql.105%29.aspx) - 您應該**不**將您的SQL語句連接在一起 - 使用**參數化查詢**代替以避免SQL注入 –
嘗試用''替換'' – artm
[Excel,VBA:參數化查詢]的可能重複(http://stackoverflow.com/questions/23117357/excel-vba-parametrized-query) –