[リストへもどる]
一括表示

投稿時間:2003/12/16(Tue) 13:25
投稿者名:あーにゃん
Eメール:
URL :
タイトル:
テキストボックス内の文字でSQL構文
お願いします。
現在、テキストボックス(txtID)がフォーム内にあって、
そこに入力された文字でSQLで問合せを行います。

その際のSQL構文は、
「SELECT UserName FROM UserInfo WHERE ID = '" & txtID.text & "'"」
としています。

IDに「A0001」など入力して、問合せをすればOKですが、
このテキストボックスに「'」の記号を使用した場合、エラーとなります。
今現在の対処法として、Instr関数で「'」記号が使用されているか?を
チェックしています。

結果としてお聞きしたいことは...
1.Instr関数以外で、何かお奨めなチェック方法があるか?
2.「'」記号以外にも、何かチェックしたほうが良い記号などがあるか?
です。よろしくお願い致します。

投稿時間:2003/12/17(Wed) 10:52
投稿者名:ak
Eメール:
URL :
タイトル:
Re: テキストボックス内の文字でSQL構文
こんにちは。

> その際のSQL構文は、
>「SELECT UserName FROM UserInfo WHERE ID = '" & txtID.text & "'"」
> としています。

> IDに「A0001」など入力して、問合せをすればOKですが、
> このテキストボックスに「'」の記号を使用した場合、エラーとなります。

お解りかと思いますが一応説明しておきます。

テキストボックスに「A00'01」と入力された場合、
SQLは「SELECT UserName FROM UserInfo WHERE ID = 'A00'01'」
となり「'A00'」が文字列として認識され残りの「01'」がSQL構文エラーと
なります。

「'」を文字列として認識させたい場合は「'」を「''」にします。
「SELECT UserName FROM UserInfo WHERE ID = 'A00''01'」

VBでダブルクォーテーションを文字列型変数に格納する場合と同じです。

> 1.Instr関数以外で、何かお奨めなチェック方法があるか?

VB6でしたらReplace関数を使用すれば良いと思います。

例)SELECT UserName FROM UserInfo WHERE ID = '" & Replace(txtID.text,"'","''") & "'"

投稿時間:2003/12/17(Wed) 12:46
投稿者名:あーにゃん
Eメール:
URL :
タイトル:
Re^2: テキストボックス内の文字でSQL構文
ak様、ご返答有難うございます。

すいません。私の書き方が分かりにくかったとは
思いますが、基本的にSQLテーブル内のデータには
「'」が入っていることはありません。
なので、テキストボックスにユーザーが「'」記号
を意識的に使用することはありません。

ユーザーの不注意や、いたずら等で「'」記号が
使われた場合にエラー対処として、記述したいのです。

でもak様の案のように「Replace」を使用しても
対処は出来ましたので、有難うございました。

PS.「'」記号以外にも、このような対処をしておいた
方が良いものってあるのでしょうか?

投稿時間:2003/12/17(Wed) 13:10
投稿者名:ak
Eメール:
URL :
タイトル:
Re^3: テキストボックス内の文字でSQL構文
> ユーザーの不注意や、いたずら等で「'」記号が
> 使われた場合にエラー対処として、記述したいのです。

そういうことでしたら入力時にチェックするのが一番かと思います。
記事No.No.7093「テキストボックス中に漢字が入力されないようにしたい」
が参考になると思います。

> PS.「'」記号以外にも、このような対処をしておいた
> 方が良いものってあるのでしょうか?

「'」で囲むと文字列として認識されますので他に処理しなければ
いけないようなものはありません。

投稿時間:2003/12/19(Fri) 11:15
投稿者名:あーにゃん
Eメール:
URL :
タイトル:
Re^4: テキストボックス内の文字でSQL構文
ak様、色々と有難うございます。
やってみます。