JavaScript初心者入門講座 に関する質問
【質問】
SQL文を組み立てる部分について質問があります。
whereで特定の行を抽出する場合に、抽出条件を変数に代入したいのですが、上手くいきません。
以下のように数値を指定した場合は上手くいくのですが、
var one = "1";
var mySql = "select * from T01Prefecture where PREF_CD = " + one;
var recordSet = database.Execute(mySql);
文字列だと上手くいきません。
var fukuoka = "福岡県";
var mySql = "select * from T01Prefecture where PREF_NAME = " + fukuoka;
var recordSet = database.Execute(mySql);
SQLの組み立て時は変数の扱いが変わるのでしょうか?
また、SQL組み立て時に入力した文字列(コントロールまたは変数)+ワイルドカードでDBからデータを抽出したいのですが、可能でしょうか?
ご教授お願いします。
使用しているmdbは、ダウンロードさせて頂いた、SampleDB010です。
【回答】
文字列は「'」シングルクォートで囲む必要があります。
したがって、正しくは以下のようになります。
var mySql = "select * from T01Prefecture where PREF_NAME = '" + fukuoka + "'";
これがプログラムで組み立てられると、
select * from T01Prefecture where PREF_NAME = '福岡県'
というSQL文になります。
コツは組み立てたSQL文を、画面に表示してみることです。すると間違いに気付きやすくなります。アラートで表示してもかまいません。
また、ワイルドカードを使う場合は、次のようになります。
var mySql = "select * from T01Prefecture where PREF_NAME Like '*" + fukuoka + "*'";
プログラムで組み立てられると、
select * from T01Prefecture where PREF_NAME Like '*福*'
のようになります。
SQLについては、 Access SQL初心者入門講座 で詳しく説明しています。
【補足】
Accessでは、バージョンによって使えるワイルドカードが異なるようです。
Access2000では「*」を使いますが、Access2002以上では、ANSI規格の設定によって「%」が使えます。