VB.NETのOleDbCommandにて文字列を操作する際、文字列にダブルクォーテーションが入っていた場合は?
以下のようにmdbのT_テーブルにある「名称」というフィールドの文字列を操作するだけの単純なプログラムなのですが、
この「名称」にダブルクォーテーションが入ることがあり、その場合に「構文が不正です」エラーで途中でこけてしまいます。
このような場合、どのように対処すれば宜しいのでしょうか?
宜しくお願い致します。
Len_Shohin = fxMidB(dread("名称"), 30)
Len_Koumoku = fxMidB(dread("名称"), 34)
Str_Hyouji = StrConv(dread("名称"), VbStrConv.Narrow)
com = New OleDb.OleDbCommand("update T_テーブル set 商品名称 = Left(名称, " & Len_Shohin & "), " _
& " 慣用句名称 = Left(名称," & Len_Shohin & "), 項目名称 = Left(名称," & Len_Koumoku & "), " _
& " 一般名 = Left(名称," & Len_Shohin & "), 表示名称 = Left( """ & Str_Hyouji & """,36) " _
& " where オーダコード = '" & dread("オーダコード") & "'" & "")
com.Connection = cn
com.ExecuteNonQuery()
回答(3件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.3ベストアンサー20pt
たびたびすみません。ANo.1です。
ごめんなさい、Accessで直接試してみたんですが、副問合せは使わなくてもいけそうですね(汗)
すみませんです…
とりあえず、
表示名称 = Left( """ & Str_Hyouji & """,36)
のあたりのクォーテーションを修正して実行しなおしてみてください。
(あと、Len_??? は数値でしょうから、出来ればCStrかCType(???,String)で
変換掛けておいた方がいいかもしれません)
この回答へのお礼
色々とありがとうございました。
まぁなんとかいけました。。。
ANo.1です。すみません勘違いしてました。
で、そのUpdate文ですが、
Left(名称,…
の「名称」ってのはフィールド名ですよね?
そこにフィールド名を直接関連付けるには、副問合せを使う等しないと
不可能だと思います。
(副問合せの結果に直接関数を適用ってのは、やった事無いけど…普通に出来るのかなぁ?)
今回の場合は、「名称」を使う部分が多いので、先に該当の「名称」を取得して
その文字列を直接編集した方が楽だと思います。
"update T_テーブル set 商品名称 = Left('" & meisyou & "', " & CStr(Len_Shohin) & …
みたいな感じで。
(meisyou は、取得した文字列を格納した変数)
あ、あと、SQL文で文字列の指定はシングルクォートですよ。
Left( """ & Str_Hyouji & """,36) とかは直さないといけません。
…ん? そもそもStr_Hyouji を「SQL文で」編集する必要は無いような…?
"""(ダブルクォーテーション3つ)で、実際の文字列として " (ダブルクォーテーション1つ)を、
""""(同4つ)で実際には ""(同2つ)を指定する事になります。
試しに、
MessageBox.Show("""Test"""" ")
を貼り付けたプログラムを実行してみて下さい。分かると思います。
なお、この書き方だと分かりにくい、という場合は、Chr(34) (=Chr(&H22))
を使うという手もあります。
例:MessageBox.Show(Chr(34) & "Test" & New String(Chr(&H22), 2))
この回答への補足
ご回答ありがとうございます。
それはわかるんですが、今回の場合はどのようにすればいいですか?
あらかじめ全レコードで「名称」を検索してダブルクォーテーションが
あるかどうかを判断して、その場合にどこかのフィールドにフラグをたてて
UPDATEのときに読み飛ばすぐらいしか思いつかないのですが。。。
宜しくお願いします。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











