シングルコーテーションをSQLでDBにUPするには?

解決


ヒッキー  2004-06-24 17:15:38  No: 114251  IP: [192.*.*.*]

VBからSQL文を使って、ACCESSのデータベースにUPするときに、
テキストボックスにシングルコーテーションが入力されている場合、
エラーになってしまって困ってしまいました(--;)

例えばこんな感じです↓

Text1.text = "B'z"

A = "SELECT * FROM テーブル名 WHERE NAME = '" & Text1.text & "';"

すると、テキストボックスに  ’があると、’の数が合わなくなってエラーになると思われますが、
できるなら、テキストボックスに入力する人の手をわずらわすことなく
入力できるようにしたいと思っています。

もし不可能であれば、’は入力できません、などのメッセージボックスを表示させる方法でも
教えていただけるとうれしいです。よろしくお願いします。m(_ _)m
(VB6 SP5 WIN2000)

編集 削除
特攻隊長まるるう  2004-06-24 17:31:19  No: 114252  IP: [192.*.*.*]

’を2つ続けて書けば可能だと思います(少なくとも SQL Server では可能)
テキストボックスの文字列に’が含まれているか調べて文字列編集してください。

編集 削除
nanashi  2004-06-24 17:34:06  No: 114253  IP: [192.*.*.*]

未確認ですが、Replaceで「'」を「''」にしてみるとか。

編集 削除
ヒッキー  2004-06-24 18:39:09  No: 114254  IP: [192.*.*.*]

早速のご解答ありがとうございます。

特攻隊長まるるうさんとnanashiさんの合わせ技一本で解決いたしました(^o^)/~

どちらかが欠けていたら、解決できませんでした。

本当にありがとうございました。久々に感動しました…(T▽T)

編集 削除
すらいむ  2005-08-10 17:22:12  No: 114255  IP: [192.*.*.*]

自分も同じことで  詰まってます。

    'SQLのクリア
    prStrSql = ""
    
    'SQLの指定
    prStrSql = "UPDATE SYAIN SET V_SYAIN_NM = ''" & txtNm.Text & "'', N_SYAIN_AGE = " & txtAge.Text & " WHERE N_SYAIN_NO = " & txtNo.Text & ""
    
    Replace(prStrSql,"'",""")
    
    '画面の内容で社員情報テーブルを更新
    prCn.Execute prStrSql

これだとうまくいきません。
どうすればいいでしょうか?

編集 削除
特攻隊長まるるう  2005-08-10 17:39:49  No: 114256  IP: [192.*.*.*]

テキストボックスの中の(データに該当する)文字列のみ
Replaceで「'」を「''」にして下さい。

SQL文の中でシングルコーテーションは意味を持ちます。全部置き換えちゃったら
文法がぐちゃぐちゃになって実行できなくて当然です。

編集 削除
特攻隊長まるるう  2005-08-10 17:44:19  No: 114257  IP: [192.*.*.*]

…あ、しかもシングルコーテーションを2回繰り返して書くのと
ダブルコーテーションは違いますので、念のため。
>Replace(prStrSql,"'",""") '←間違い
Replace(txtNm.Text ,"'","''") '←正解

編集 削除
すらいむ  2005-08-10 18:31:47  No: 114258  IP: [192.*.*.*]

お答えありがとうございます。

回答された通りにしてみたところ  エラーメッセージで「=」が要求されたので

    'SQLのクリア
    prStrSql = ""
    
    'SQLの指定
    prStrSql = "UPDATE SYAIN SET V_SYAIN_NM = '" & txtNm.Text & "', N_SYAIN_AGE = " & txtAge.Text & " WHERE N_SYAIN_NO = " & txtNo.Text & ""
            
    Dim inputStr As String
    
    inputStr = txtNm.Text
    
    txtNm.Text = Replace(inputStr, "'", "''")
            
    '画面の内容で社員情報テーブルを更新
    prCn.Execute prStrSql

こんな感じにしたのですが  これでも「SQL command not properly ended」というエラーが出ます。

編集 削除
いな  2005-08-10 20:02:44  No: 114259  IP: [192.*.*.*]

SQL文のエスケープ処理について調べてください。

特殊文字は2つ続けて記述する。

編集 削除
LESIA  2005-08-10 21:40:45  No: 114260  IP: [192.*.*.*]

コードの書く順番が違うのでは?

    Dim inputStr As String
    
    inputStr = txtNm.Text
    
    txtNm.Text = Replace(inputStr, "'", "''")
            
    'SQLの指定
    prStrSql = "UPDATE SYAIN SET V_SYAIN_NM = '" & txtNm.Text & "', N_SYAIN_AGE = " & txtAge.Text & " WHERE N_SYAIN_NO = " & txtNo.Text & ""
            
    '画面の内容で社員情報テーブルを更新
    prCn.Execute prStrSql

編集 削除
銀河系軍団  2005-08-11 11:07:51  No: 114261  IP: [192.*.*.*]

'表示された文字列
    Dim StrNm As String
    
    '氏名テキストと置き換える
    StrNm = txtNm.Text
    
    '氏名テキストに表示された「'」を「''」に置き換える
    txtNm.Text = Replace(StrNm, "'", "''")
    
    '氏名テキストに表示された「"」を「""」に置き換える
    txtNm.Text = Replace(StrNm, "'", """")
        
    'SQLのクリア
    prStrSql = ""
    
    'SQLの指定
    prStrSql = "UPDATE SYAIN SET V_SYAIN_NM = '" & txtNm.Text & "', N_SYAIN_AGE = " & txtAge.Text & " WHERE N_SYAIN_NO = " & txtNo.Text & ""
        
    '画面の内容で社員情報テーブルを更新
    prCn.Execute prStrSql

上記で解決しました。
コードの記述順番とは  チョー基本的なことでミスってました^^;
ありがとうございました。

編集 削除
銀河系軍団  2005-08-16 15:05:12  No: 114262  IP: [192.*.*.*]

すいません。
解決していませんでした。

>'氏名テキストに表示された「'」を「''」に置き換える
>txtNm.Text = Replace(StrNm, "'", "''")
>
>'氏名テキストに表示された「"」を「""」に置き換える
>txtNm.Text = Replace(StrNm, "'", """")


'氏名テキストに表示された「'」を「''」に置き換える
txtNm.Text = Replace(txtNm.Text, "'", "''")
    
'氏名テキストに表示された「"」を「""」に置き換える
txtNm.Text = Replace(txtNm.Text, """, """")  ・・・※

こんな感じにしなければいけないのですが
※のところでコンパイルエラーになってしまいます。
どうすればいいでしょうか?

編集 削除
名無し  2005-08-16 16:49:07  No: 114263  IP: [192.*.*.*]

おまいは誰だw

編集 削除
LESIA  2005-08-16 17:03:29  No: 114264  IP: [192.*.*.*]

SQLでシングルコーテーションを使うときは2つ続けて書くのと同じように
VBの文字列内でダブルコーテーションを使うときは2つ続けて書きます。

氏名テキストに表示された「"」を「""」に置き換える
txtNm.Text = Replace(txtNm.Text, """", """""")

編集 削除
銀河系軍団  2005-08-16 17:35:22  No: 114265  IP: [192.*.*.*]

ありがとうございました

編集 削除
ななし  2005-08-17 13:40:38  No: 114266  IP: [192.*.*.*]

http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200405/04050003.txt

>銀河系軍団さん

↑のスレッドでも同様なのですが、他人の質問を利用してご自分の質問を投げる(しかも勝手に解決する)のは止めて下さい。
全く掲示板のルールに則っていないばかりでなく、掲示板利用者の混乱の元になるだけです。
こう指摘すると、「初心者なもので…」とおっしゃられるかもしれませんが、質問の内容ならともかく掲示板利用のルールについては、言語習熟の度合いに関係なく対応が可能なはずです。
細かいことをうるさいと思われるかもしれませんが、上記のような小さなルール違反が積み重なって、ご自分の利益をも損失させることをご熟慮下さい。

編集 削除