2

私はExcelを使用してAccessデータベースにデータを入力していますが、一部のデータ文字列には測定用のアポストロフィが含まれています。

これは私のSQL入力文字列です

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

    cn.Execute (stSQL)

私の文字列は次のとおりです。

アリプラスト4Eホワイト。30 "X80'X1/4"ソフト。

この文字列では、80の後の'がエラーの原因であり、これを回避する方法がわかりません。アポストロフィを入力しないようにユーザーに指示することはできません。どうすればこれを回避できますか?

ありがとう

4

2 に答える 2

12

これは、パラメーターを使用するか (推奨)、Replace を使用して修正できます。

& 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 テーブル名 (DestinationField) SELECT '" & Replace(rs![field1], "'", "'" & " & " & """" & "'" & """" & " & '") & "'" )

これは私にとってはうまくいき、VBAを使用して、アポストロフィ(一重引用符)を含む値をSQL挿入ステートメントを使用してテーブルに挿入することができました

于 2013-02-06T04:05:52.403 に答える