2

我正在使用 excel 将数据输入到 Access 数据库中,并且我的一些数据字符串包含用于测量的撇号。

这是我的 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 之后的 ' 导致错误,我不知道如何解决这个问题。我不能只告诉用户不要输入撇号。我怎样才能解决这个问题?

谢谢

4

2 回答 2

12

您可以通过使用参数(推荐)或使用替换来更正此问题。

& 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

请注意,虽然我将这些参数命名为 param1 到 param4,但为了方便起见,重要的是顺序,它必须与使用参数的顺序相匹配。

于 2012-08-03T13:47:43.660 回答
0

替换用单引号括起来的值中的撇号(例如 'O'Brien' 中的 O'Brien),如下所示:O' & "'" & 'Brien

使用以下代码片段: Replace(rs![field1], " ' ", " ' " & " & " & """" & " ' " & """" & " & ' ") & "'" ) . 注意我在单引号和双引号之间添加了一个空格,以便更容易区分它们。在您使用的实际代码中,您不应该有这些空格。

例如

代替

Docmd.RunSQL ("INSERT INTO 表名 (DestinationField) SELECT '" & rs![field1] & "'")

采用

Docmd.RunSQL("INSERT INTO Tablename (DestinationField) SELECT '" & Replace(rs![field1], "'", "'" & " & " & """" & "'" & """" & " & '") & "'" )

这对我有用,并允许我使用 VBA 使用 SQL 插入语句将包含撇号(单引号)的值插入到表中

于 2013-02-06T04:05:52.403 回答