2016-11-26 71 views
0

我有一個包含insert語句的Access表單。VBA中的SQL語句錯誤

代碼工作很好,但問題,當我輸入包含一個單引號'文本:

strSQL = "INSERT INTO student (stname) VALUES ('" & stname.Value & "')" 

DoCmd.RunSQL strSQL 

stname.value = Ra'ed or ka'l

則聲明變成錯

+3

[SQL注入警報(HTTP:// MSDN .microsoft.com/en-us/library/ms161953%28v = sql.105%29.aspx) - 您應該**不**將您的SQL語句連接在一起 - 使用**參數化查詢**代替以避免SQL注入 –

+0

嘗試用''替換'' – artm

+0

[Excel,VBA:參數化查詢]的可能重複(http://stackoverflow.com/questions/23117357/excel-vba-parametrized-query) –

回答

0

一般我會與有關SQL注入警告marc_s同意。然而,對於在非關鍵任務數據庫一個快速和骯髒的解決方案,你不介意其他用戶可能侵入或以其它方式搞亂,你會用

strSQL = "INSERT INTO student (stname) VALUES ('" & Replace (stname.Value, "'", "''") & "')" 
0

考慮一個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