• ベストアンサー

InputBoxを抽出条件にしたSQL文

MicroSoftのAccessを使用してSQL文を作成しています。 VisualBasicに用意されているInputBox関数を利用して、 それを抽出条件として当てはめたいのですが、どうも 上手くいきません。 詳細を書きますと、InputBox関数で4桁の数字を入力 します。それは年月を表します。例えば平成14年11月なら 1411と入力します。 テーブルの中に「扱月」という列があり、それに合致 しているものを抽出したいのですが、変数に入ってく れません。 InputBoxで入れた数の変数はresという名の中に入れて いるのですが、それをSQL文内で使用しても、どうも 望む数字が入っていないようなのです。 クォーテーションで囲んでみてもだめでした。 どのようにすれば宜しいのでしょうか。

  • J-SYS
  • お礼率72% (88/121)

質問者が選んだベストアンサー

  • ベストアンサー
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.2

SQL = "select * from T_通常分給付台帳 where 給付月 = " & res もしくは SQL = "select * from T_通常分給付台帳 where 給付月 = '" & res & "'" とやってみてはいかがでしょうか?

J-SYS
質問者

お礼

SQL = "select * from T_通常分給付台帳 where 給付月 = '" & res & "'"の文で問題なくいけました。 本当にありがとうございました。

その他の回答 (2)

回答No.3

まず検索対象は、扱月ではなく給付月ですね。 給付月のデータ型は何になってますか? 数値ならば、 SQL = "select * from T_通常分給付台帳 where 給付月 = " & res で問題ないように思えるのですが。 もしも文字列なら、 SQL = "select * from T_通常分給付台帳 where 給付月 = '" & res & "'" だと思います。 また、給付月フィールドは、平成14年11月を表す場合にはちゃんと1411が入っていますか?

J-SYS
質問者

お礼

SQL = "select * from T_通常分給付台帳 where 給付月 = '" & res & "'"の文で問題なくいけました。 本当にありがとうございました。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

どのようにプログラムを書いてるのか出さないと さっぱりわかりません。

J-SYS
質問者

補足

疑問部分だけ抜き出します。 res = InputBox("集計月入力", Title, Format(DateAdd("m", -1, Date), "eemm")) Set rsQ = New ADODB.Recordset SQL = "select * from T_通常分給付台帳 where 給付月 = ????" rsQ.Open SQL, CurrentProject.Connection 上の?部分をInputBoxで入力した数字として 当てはめることをしたいと思っています。

関連するQ&A

  • VBA inputbox関数について

    質問をさせてください。 VBA inputbox関数にて 数字を入力をし、その数字を元に挿入を行うというものを施しています。 そして下記の内容で実際は動くのですがどうしても疑問点が浮かんできます。 それはinputbox関数には宣言をしないと文字列として処理されますよね? なので、宣言をlongにして整数化をしています。 しかし、If "1" <= buf1 <= "65536" Thenの部分で 数字に""(ダブルコーテーション)を入れないとうまく作動しません。 例えば「0」を入力しても正の処理へ行います。 ダブルコーテーションで囲んでいる数値は文字列として認識されるはず・・ 入力は数値として宣言をしているのだからダブルコーテーションはいらないのではないんでしょうか? また、もし数字ではなく、記号などを入力をしてしまった場合の偽の処理へいくにはどうすれば いいでしょうか? 恐れ入りますがよろしくお願いいたします。 Sub test() Dim buf1 As Long buf1 = InputBox("コピー先の列番号を入力してください") If "1" <= buf1 <= "65536" Then Cells(buf1, 1).EntireRow.Insert Else MsgBox "正しい列番号を入力してください" Exit Sub End If End Sub

  • ACCESSのInputBox

    いつもお世話になっています。 ACCESSでInputBox関数を使っているのですが、 キャンセルボタンが押されたときの処理が分かりません。 InputBoxに何もない状態でキャンセルが押される時の処理は分かるのですが、何か入力された状態で、キャンセルが押された場合、どうしたらよいのでしょうか? 変数=InputBox("○○",,初期値) 何も入力されていない場合なら、if 変数="" Then で問題は無いのですが、初期値を設定したいので、必ず何かが入力されている状態になっています。 よろしくお願い致します。

  • SQLにて順列の抽出

    MySQLにてSELECT文にて順列の抽出をしようと試みていますが、順列を出すためのSQL文がわからず困っています。 TABLE1 +-----+-----+-----+-----+ | NUM | A | B | C | +-----+-----+-----+-----+ | 101 | 0 | 4 | 9 | +-----+-----+-----+-----+ | 102 | 2 | 2 | 0 | +-----+-----+-----+-----+ 例えば上記の様なテーブルがあって、NUM=101のA,B,Cを取り出して 049 094 409 490 904 940 のような順列を作り出してPHPから渡した変数D(仮にvar=409)と照らし合わせようと試みていますが、1つの行の中の数字で順列を抽出するSQL文がわからず困っていますので、ご教授願います。

    • ベストアンサー
    • MySQL
  • VC2005でInputBox関数?

    VisualC++2005を使っていますが、VisualBasicのようなInputBox関数はあるのでしょうか? プログラムが止まり、メッセージを出して、 文字列入力し、OKボタンを押すと、 入力した文字列を使ってプログラムが流れる 有れば便利だと思うのですが・・・

  • Excelのフィルタ条件の付け方(VBA使用)

    ご存知の方、教えてください。 フィルタの条件を、マクロ実行時に入力できる仕組みを作成したいと思うのですが、うまくいきません。 あるリストから、「売上日」フィールドを使って「○月○日」~「○月○日まで」という抽出を試みました。 inputboxを使えばいいような気がしたので、最初に hiduke1、hiduke2を変数指定しておき、 hiduke1 = inputbox("抽出開始日を入力してください) としました。 そして、フィルタの抽出条件に criteria1 := "<=hiduke1" と指定したところ、抽出結果が0件でした・・・。 さらに criteria1 := <= hiduke1 とダブルクォーテーションを取ったところ、「コンパイルエラー」が出てしまいました。 ・抽出条件に変数を使用したい。 ・criteria1,criteria2プロパティでは不等号をどのようにあらわすのか。 以上2点、よろしくお願いします。

  • EXELで条件抽出をしたい…

    教えて下さい。EXELで作った下のような表(データ)がありその条件に合う人を抽出したいんですが…       A   B   C   D 1 Aさん 1234  2345  3456  4567 2 Bさん 6788  1234  5556  7778 3 Cさん 7788  7778  5443  7789 A~Dのセルにランダムに並んだ数字を入力している(ここでは、番号(1234)と入力している)人を関数を使い一発表示したいんですが。  A列だけに1234という数字を入力している人を抽出し、条件にあえば「○」という表示をできるようにはIF関数を使いできましたが、 AさんのA列、B列、C列全てを検索範囲に入れた、(たとえば「1234」と入力しているなら「○」等で表示(抽出)したいんですが…それができる関数を教えて下さい。列ごとしかできないのか…??? 分かりにくいですか? (^_^; 宜敷お願いします。

  • 抽出した行数を変数に入れたい(オラクルSQL)

    SELECTで抽出した行数を変数に格納したいのですが、上手くいきません。 SQLにあまり経験がなく、ネットで調べながら実践しております。 例えば以下の簡単なSQLを作ったとして、 ---------------------------------------------------- SELECT a,b,c,d,e,f FROM table WHERE c=10 AND e=20; ---------------------------------------------------- ここで抽出した行数を取得し、それを変数に入れたいと思っております。 というのも、後々、抽出したデータの行数を表示したい場合に SELECT COUNT(*) FROM table WHERE c=10 AND e=20; というSQLをその都度入力していては非効率だと思ったからです。 そこで抽出する際に行数を取得し、それを変数に格納して、 行数を表示する処理が今後必要になった際に、その変数を表示すれば良いと考えました。 ですがネットで変数のことを調べた際に VARやDEFINE等のコマンドを見つけましたが、SQLを実行しても上手くいきません。 最初に記載したSQLに、どのような構文を入れたら良いのでしょうか。

  • SQL文に変数を埋め込む場合の方法

    //config.php //$table = "TableName"; 1:require "config.php"; 2:$sql = "SELECT " . $fld . " AS genre, 3: COUNT(*) AS cnt FROM TableName GROUP BY " . 4:$fld; $res = mysql_query($sql, $conn) or die("Data抽出エラー"); 上記のソースを 2:$sql = "SELECT " . $fld . " AS genre, 3: COUNT(*) AS cnt FROM " . $table . " GROUP BY " . $fld; 4: $res = mysql_query($sql, $conn) or die("Data抽出エラー"); この様にして、config.phpより、テーブル名を変数として読み込みたいのですが、エラーになってしまいます。 3行目をどのように記述すればよいのでしょうか?

    • ベストアンサー
    • PHP
  • プログラミングPHP内でのSQL文に関するご質問

    プログラミングのPHPの学習中です。 掲示板に関するプログラミングで下記の様なソースコードが記述されていました。 (usersテーブルのusernameとpasswordとセッション変数のusernameとpasswordが等しいという条件の下、情報を抽出するというSQL文です。) $sql = "select * from users where username = '".$_SESSION["username"]."' and password='".$_SESSION["password"]."'"; 上記ソースコードでご質問です。 '".$_SESSION["username"]."'と、'".$_SESSION["password"]."'の箇所で、セッション変数をダブルクォーテーションで囲んでいるのは、変数展開するためと理解しました。また、更にシングルクォーテーションで囲むのは、変数展開したものを文字列として扱う為と理解しました。しかし、セッション変数の両隣にあるピリオドの意味がよく分かりません。文字列と変数を結合する為だと思うのですが、府に落ちません。 どなたかお教え頂ければ幸いです。 何卒宜しくお願い致します。

    • ベストアンサー
    • PHP
  • SQL文でデータを抽出できない。

    現行のSQL文でACCESSからデータを抽出してきていたのですが、それでは問題が起きてしまったので、以下の内容にSQLを変更したいのですが、思うようにできません。 詳しい方がいましたらご教授願います。 お手数ですが、困っているのでよろしくお願いいたします。 *現行のSQL* 日付が最も若いものでかつ、IDとSUBJECTに重複のない データを抽出する。 "SELECT .sID,B.subject,B.D_time FROM (SELECT sID,Min(D_time) AS mtime ,subject FROM Reg1Data GROUP BY sID,subject) A INNER JOIN Reg1Data B ON A.sID=B.sID AND A.mtime=B.D_time GROUP BY B.sID,B.subject,B.D_time ORDER BY B.sID,B.subject;" *変更したいSQL* ある範囲の日付の中で(日付は、入力画面から抽出)日付が最も若いものでかつ、IDとSUBJECTに重複のないデータを抽出する。 "SELECT .sID,B.subject,B.D_time FROM (SELECT sID,Min(D_time) AS mtime ,subject FROM Reg1Data WHERE D_time <= & w_jyukobistart GROUP BY sID,subject) A INNER JOIN Reg1Data B ON A.sID=B.sID AND A.mtime=B.D_time GROUP BY B.sID,B.subject,B.D_time ORDER BY B.sID,B.subject;" 以上を実行すると、 [Microsoft][ODBC Microsoft Access Driver] クエリ式 'D_time <= & w_jyukobistart' の 構文エラー : 演算子がありません。 というエラーが出ます。 ちなみにw_jyukobistart はWEBの画面上に入力された抽出したいデータ範囲(from)です。 この変数の使い方に問題があるのか、それともSQL文自体に無理があるのか、最も良い方法をお尻の技術者の方、お答えいただけるとうれしいです。