2012-08-03 64 views
2

我使用excel將數據輸入到Access數據庫,並且一些數據字符串包含測量值的撇號。Excel VBA - 在sql字符串中使用撇號

這是我的SQL輸入字符串

stSQL = "INSERT INTO Products (ProductName, ProductDescription, ProductUnit, SupplierID) " & _ 
      "Values ('" & cboxItemNum & "', '" & txtDescription & "', '" & txtUnit & "', " & linkPID & ")" 

    cn.Execute (stSQL) 

我的字符串如下:

ALIPLAST 4E白色。 30「X 80'X 1/4」柔軟。

在這個字符串'80後導致錯誤,我不知道如何解決這個問題。我不能告訴用戶不要輸入撇號。我怎樣才能解決這個問題?

感謝

回答

9

您可以通過使用參數(推薦)或通過更換糾正。

& Replace(txtDescription,"'","''") & 

參數

Dim cmd As New ADODB.command 
cn.Open ServerConnect 

cmd.ActiveConnection = cn 

stSQL = "INSERT INTO Products (ProductName, " _ 
    & "ProductDescription, ProductUnit, SupplierID) " _ 
    & "Values (param1,param2,param3,param4)" 

cmd.CommandText = stSQL 
cmd.CommandType = adCmdText 
With cmd 
    .Parameters.Append .CreateParameter(_ 
     "param1", adInteger, adParamInput, , cboxItemNum) 
    .Parameters.Append .CreateParameter(_ 
     "param2", adVarChar, adParamInput, 50, txtDescription) 
    .Parameters.Append .CreateParameter(_ 
     "param3", adInteger, adParamInput, , txtUnit) 
    .Parameters.Append .CreateParameter(_ 
     "param4", adInteger, adParamInput, , linkPID) 
End with 
cmd.Execute recs 

注意的是,雖然我已經命名這些參數參數1至param4,這是爲了我的方便,所有重要的是秩序,必須順序一致,其中,參數將被使用。

+2

請使用參數或谷歌約[SQL注入](http://en.wikipedia.org/wiki/SQL_injection) – Eric 2012-08-03 13:59:17

+0

感謝您的幫助Remou!今天我會將所有參數切換到參數以避免將來出現問題。 – Reznor 2012-08-03 15:04:06

+0

+ 1很好解釋。 :) – 2012-08-03 16:56:21

0

替換如下值中的撇號被在單引號包圍(例如奧布萊恩在「奧布萊恩」):O「&「」」 &奧布萊恩

使用下面的代碼片斷:更換(RS![字段1], 「 '」, 「' 」&「 & 」& 「」「」 & 「' 」& 「」「」 &「&」「)& 「'」)。注意我在單引號和雙引號之間添加了一個空格,以便更容易區分它們。在你使用的實際代碼中,你不應該有這些空間。

例如

相反

Docmd.RunSQL的( 「INSERT INTO表名(DestinationField)SELECT '」 & RS![FIELD1] & 「'」)

使用

Docmd.RunSQL(「INSERT INTO Tablename(DestinationField)SELECT'」&替換(rs![field1],「'」,「'」「&」&「&「」「」 &「「」 &‘’‘’&「&」」)&「'」)

這個工作對我來說,讓我使用VBA包含撇號(單引號)值插入到一個表使用SQL插入語句