VBからSQL文を使って、ACCESSのデータベースにUPするときに、
テキストボックスにシングルコーテーションが入力されている場合、
エラーになってしまって困ってしまいました(--;)
例えばこんな感じです↓
Text1.text = "B'z"
A = "SELECT * FROM テーブル名 WHERE NAME = '" & Text1.text & "';"
すると、テキストボックスに ’があると、’の数が合わなくなってエラーになると思われますが、
できるなら、テキストボックスに入力する人の手をわずらわすことなく
入力できるようにしたいと思っています。
もし不可能であれば、’は入力できません、などのメッセージボックスを表示させる方法でも
教えていただけるとうれしいです。よろしくお願いします。m(_ _)m
(VB6 SP5 WIN2000)
’を2つ続けて書けば可能だと思います(少なくとも SQL Server では可能)
テキストボックスの文字列に’が含まれているか調べて文字列編集してください。
未確認ですが、Replaceで「'」を「''」にしてみるとか。
編集 削除早速のご解答ありがとうございます。
特攻隊長まるるうさんとnanashiさんの合わせ技一本で解決いたしました(^o^)/~
どちらかが欠けていたら、解決できませんでした。
本当にありがとうございました。久々に感動しました…(T▽T)
自分も同じことで 詰まってます。
'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
これだとうまくいきません。
どうすればいいでしょうか?
テキストボックスの中の(データに該当する)文字列のみ
Replaceで「'」を「''」にして下さい。
SQL文の中でシングルコーテーションは意味を持ちます。全部置き換えちゃったら
文法がぐちゃぐちゃになって実行できなくて当然です。
…あ、しかもシングルコーテーションを2回繰り返して書くのと
ダブルコーテーションは違いますので、念のため。
>Replace(prStrSql,"'",""") '←間違い
Replace(txtNm.Text ,"'","''") '←正解
お答えありがとうございます。
回答された通りにしてみたところ エラーメッセージで「=」が要求されたので
'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」というエラーが出ます。
SQL文のエスケープ処理について調べてください。
特殊文字は2つ続けて記述する。
コードの書く順番が違うのでは?
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
'表示された文字列
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
上記で解決しました。
コードの記述順番とは チョー基本的なことでミスってました^^;
ありがとうございました。
すいません。
解決していませんでした。
>'氏名テキストに表示された「'」を「''」に置き換える
>txtNm.Text = Replace(StrNm, "'", "''")
>
>'氏名テキストに表示された「"」を「""」に置き換える
>txtNm.Text = Replace(StrNm, "'", """")
を
'氏名テキストに表示された「'」を「''」に置き換える
txtNm.Text = Replace(txtNm.Text, "'", "''")
'氏名テキストに表示された「"」を「""」に置き換える
txtNm.Text = Replace(txtNm.Text, """, """") ・・・※
こんな感じにしなければいけないのですが
※のところでコンパイルエラーになってしまいます。
どうすればいいでしょうか?
おまいは誰だw
編集 削除SQLでシングルコーテーションを使うときは2つ続けて書くのと同じように
VBの文字列内でダブルコーテーションを使うときは2つ続けて書きます。
氏名テキストに表示された「"」を「""」に置き換える
txtNm.Text = Replace(txtNm.Text, """", """""")
ありがとうございました
編集 削除http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200405/04050003.txt
>銀河系軍団さん
↑のスレッドでも同様なのですが、他人の質問を利用してご自分の質問を投げる(しかも勝手に解決する)のは止めて下さい。
全く掲示板のルールに則っていないばかりでなく、掲示板利用者の混乱の元になるだけです。
こう指摘すると、「初心者なもので…」とおっしゃられるかもしれませんが、質問の内容ならともかく掲示板利用のルールについては、言語習熟の度合いに関係なく対応が可能なはずです。
細かいことをうるさいと思われるかもしれませんが、上記のような小さなルール違反が積み重なって、ご自分の利益をも損失させることをご熟慮下さい。