• ベストアンサー

配列を使ってクエリの値を変数にしたい

配列を使ってクエリの値を変数にしたいと考えていますが、 変数として見ず、文字列としてみているようです。 *********test.asp*************** kyoku1 = Request.Form("kyoku1") kyoku2 = Request.Form("kyoku2") kyoku3 = Request.Form("kyoku3") (kyoku1~3は前のページのフォームから値を持ってきています。) Dim k(2) Dim m(2) Dim jj jj = 0 k(0) = kyoku1 k(1) = kyoku2 k(2) = kyoku3 m(0) = kyokumei1 m(1) = kyokumei2 m(2) = kyokumei3 Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.ConnectionString = Server.MapPath("DB名") db.open Do While j < 3 Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号)='"&k(jj)&"')") m(0) = rs.Fields.Item("曲名") j = j + 1 jj = jj + 1 Loop Response.Write(" & kyokumei1 & ") Response.Write(" & kyokumei2 & ") Response.Write(" & kyokumei3 & ") 宜しくお願い致します。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.7

生成されたコードに問題がないのであればEOF/BOFになる可能性が低いのですが ・・・ EOF/BOFになるのは WHERE句の指定が不正でレコードを特定できない場合に起きると思います

その他の回答 (6)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.6

k(j)で渡していますが jの値は適正ですか? for j=0 to 2 Response.Write( "SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号)='" & k(j) & "')<br>" ) Next を実行して 適切なSQL文になっているのか確認しましょう

smorgas030
質問者

お礼

回答ありがとうございます。 返信遅れて申し訳ありません。 実行しましたが、以下のように問題なくなっていると思います。 SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号)='1000') SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号)='10099') SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号)='12312') がうまくいきません。 どうすればいいのでしょうか。 宜しくお願い致します。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

Dim宣言で2までしか宣言していないのに jjが3ならエラーになって当然ですよ <!-- 下記3行はOK --> Response.Write("" & m(0) & "<br>" ) Response.Write("" & m(1) & "<br>" ) Response.Write("" & m(2) & "<br>" ) <!-- この行はエラー --> Response.Write("" & m(3) & "<br>" )

smorgas030
質問者

お礼

回答ありがとうございます。 インデックスの範囲のエラーは解消致しました。 ありがとうございました。 やはりうまくいきません。 (1)Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号)='" & k(j) & "')") (2)Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号)='" & k(0) & "')") (2)だと問題ないのですが、(1)だとエラーになります。 エラーメッセージは以下のようになっています。 BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。 また、最初に書きました、以下のコードもうまくループしません。 上記の(2)にしたとき、 m(j) = rs.Fields.Item("曲名") Response.Write(""& m(j) &"<br>") j = j + 1 m(0)の値は出力されますが、m(1)と続いていきません。 m(0)の値はLOOPの回数表示されます。 宜しくお願い致します。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

SQLを組み立ててResponse.Writeで組み立てたSQL文を出力した際に SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号='k(jj)')) といった具合になってしまうということでしょうか k(jj)の前後の&は & k(jj) & といった具合に スペースを空けたほうがいいですよ エラーになっているのであればその内容などを投稿してみてはいかがでしょう

smorgas030
質問者

お礼

回答ありがとうございます。 そうなります。 Response.Write(""& k(0) &"<br>") Response.Write(""& k(jj) &"<br>") 上の1行目だと問題ないのですが、 2行目に変更すると、 「インデックスが有効範囲にありません。: '3'」 のメッセージになります。 スペースのご指摘ありがとうございました。 宜しくお願い致します。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

でしたら ループのなかでm(j)に代入すればいいのでは m(0)= rs.FieldsItem("曲名")を m(j)=rs.FieldsItem("曲名") として for j = 0 to 2   Response.Write( m(j) ) next といった具合で …

smorgas030
質問者

お礼

回答ありがとうございます。 まだその前の段階で、 m(j) も k(jj) も配列としてみずに、文字列としてみているようです。 何か書き方が違うのでしょうか。 宜しくお願い致します。

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

すいません、何がどうなればいいのか、これだけでは、 イマイチ見えないのですが、「クエリの値」の値とは、 Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号)='"&k(jj)&"')") でSQL実行した後の「曲名」を指しているということでしょうか? それから、kyokumei1~kyokumei3は、 m(0) = kyokumei1 m(1) = kyokumei2 m(2) = kyokumei3 のように代入してますが、そもそもmという配列に kyokumei1~kyokumei3を代入する意味があるんでしょうか? それとも、他で使われているのでしょうか? さらに、Set rs = ...... の「rs」は、レコードセットだと 思いますが、ADORecordSetでよろしいですか? UPするソースコードと「何が」「どうなってしまう」という 現象を具体的に明示して頂くと、正確な回答がしやすいので、 もう少し、質問したい箇所のソースコードを整備したうえで 補足頂けますか? よろしくお願いします。

smorgas030
質問者

お礼

回答ありがとうございます。 言葉足らずで申し訳ありません。 補足させていただきます。 >すいません、何がどうなればいいのか、 フォームで番号を入力させて、 その値をtest.aspに持ってきて、 ACCESSでクエリをさせて、 番号に対して、曲名をひっぱってきます。 そして、その曲名を表示させたいと考えています。 >「クエリの値」の値とは、 >Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE >((テーブル名.番号)='"&k(jj)&"')") >でSQL実行した後の「曲名」を指しているということでしょうか? 「曲名」と「番号(k(jj))」を変数にしたいと考えています。 >のように代入してますが、そもそもmという配列に >kyokumei1~kyokumei3を代入する意味があるんでしょうか? >それとも、他で使われているのでしょうか? 申し訳ありません。 m(0) = rs.Fields.Item("曲名") は m(jj) = rs.Fields.Item("曲名") の間違いでした。 >さらに、Set rs = ...... の「rs」は、レコードセットだと >思いますが、ADORecordSetでよろしいですか? こちらは、他のページでも使用していますので、 問題ないかと思います。 もともと以下のコードで作成しましたが、 長すぎてなんとかするために配列を使用しようと考えました。 ************元のコード************************ Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE ((((テーブル名.番号)='" & kyoku1 & "')") kyokumei1 = rs.Fields.Item("曲名") Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE ((((テーブル名.番号)='" & kyoku2 & "')") kyokumei2 = rs.Fields.Item("曲名") Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号)='" & kyoku3 & "')") kyokumei3 = rs.Fields.Item("曲名") Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.番号)='" & kyoku4 & "')") kyokumei4 = rs.Fields.Item("曲名") Response.Write(" & kyokumei1 & ") Response.Write(" & kyokumei2 & ") Response.Write(" & kyokumei3 & ") Response.Write(" & kyokumei4 & ") ************元のコード************************ 宜しくお願い致します。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Whereの引数が数値なら 『'』で括ってしまうとダメだと思いますよ WHERE ((テーブル名.番号)=" & k(jj) & ")" ) といった具合に ='"を ="に "')"を ")"に変更してみてください

smorgas030
質問者

お礼

回答ありがとうございます。 引数ですが、 DBはアクセスを使用しており、 番号のデータ型はテキスト型にしています。 ですので、そこは問題ないと思います。 配列を使わずに代入するだけなら、 問題なく動作もします。 宜しくお願いいたします。

関連するQ&A

  • Access2000のデータをASPで表示させるには?

    間違ってソースを全部消してしまって、記憶を頼りに戻してみたのですが、Accessのデータの表示方法がわからなくなってしまいました。 ↓これがそのソースです <%@ LANGUAGE="VBScript" %> <% Option Explicit %> <Html> <Head> </Head> <Body> <% Dim db,rs,sql Set db = Server.CreateObject("ADODB.Connection") db.Open ("db1")←データベース名入れるんですよね? sql = "Select id,namae,n_yomigana,juusyo,j_yomigana From table1 where db1" Set rs = db.Execute (sql) Response.Write rs.fields("id") Response.Write "<br>" Response.Write rs.fields("namae") Response.Write "<br>" Response.Write rs.fields("n_yomigana") Response.Write "<br>" Response.Write rs.fields("juusyo") Response.Write "<br>" Response.Write rs.fields("j_yomigana") Response.Write "<br>" rs.close db.close %> </Body> </Html> ソースを丸ごと載せてしまってごめんなさい、読みにくいですよね。 足りないところや直し方が思い出せなくて困っています。 ご迷惑おかけしますが、アドバイスお願いします。

  • 命令を変数に応じて変化させるには?

    「テーブル1」というテーブルの「データ」というフィールドにA~Jまで10個データが格納されていたとします。 このデータを変数 DATA01~DATA10 にそれぞれ格納したいと思っています。 下記ソースでは、レコードの終端までループしても、DATA01に「テーブル1」の1レコード目の値、"A"しか格納できませんが、これをDATA02に"B",DATA03に"C"・・・と順々に格納するにはどうしたら良いのでしょうか? それぞれの変数に応じた命令を一つ一つ書くのではなく、Countの値に応じて命令そのものを変化させて行いたいと思っています。他の言語ではわかるのですが、VBではどうするのかわかりません。 ご指導程お願い致します。 Private Sub テスト_Click()   Set DB = CurrentDb   Set RS = DB.OpenRecordset("テーブル1")   Count = 1   Do Until RS.EOF    DATA01 = RS!データ    RS.MoveNext    Count = Count + 1   Loop   End Sub

  • 正しい値が戻ってきません。どこが間違っているのでしょう。

    おはようございます http://www.newcanyon.com/i/tips.html のルールで相性を占うプログラムをここで何度か質問させていただきまして、組み、無事できた!と思ったのですが、実行すると誤った数値が戻ってきます いったいどこが間違っているんでしょうか? ぜひヒントを出していただけると助かります ※ん・記号などの文字は6として計算します 入力フォームは あなたの名前 <INPUT TYPE=text NAME=myname Value="" SIZE=20> 相手の名前 <INPUT TYPE=text NAME=yourname Value="" SIZE=20> から成り Receive.aspは NAME1=Request.Form("myname") NAME2=Request.Form("yourname") NAME=NAME1&NAME2 Dim i,p p=Len(NAME) Dim Suji(100) For i=1 to p Suji(i)=Mid(NAME,i,1) Select Case Suji(i) Case Suji(i)="あ","か","が"… Suji(i)=1 Case Suji(i)="い","き","ぎ"… Suji(i)=2       以下ウ、エ、オの段が続く Case Else Suji(i)=6 End Select Next Dim m,j,k,n,nows m=Len(NAME) n=Len(NAME) For k=1 to n-1 For j=1 to m-1 Suji(j)=Suji(j)+Suji(j+1) nows=k If Suji(j)>=10 Then Suji(j) = Suji(j) mod 10 End If Next Next Aisho=Suji(j-1)&Suji(j) Response.Write S1 & "相性は" & aisho & "%です" %> たとえば、myname=あ yourname=い なら26%が戻ってきます。 selectのところが違うんでしょうか…

  • フォームで複数の条件を入力させて、その条件に対してクエリを組みなおして、結果を出力したい

    以下のフォームを作成しました。 ************1.html************ <form method="POST" action="2.asp"> <table> <tr> <td>氏名</td> <td><input name="simei" file" type="text"></td> </tr> <tr> <td>住所</td> <td><input name="jusho" file" type="text"></td> </tr> <tr> <td>TEL</td> <td><input name="tel" file" type="text"></td> </tr> </table> <input type="submit" value="検索"> 次に入力された値をクエリに入れて、結果を出力しようとしています。 入力された項目が、 空欄の場合は、条件に入れない、 複数の場合は、条件を複数にする、 というようにしたいです。 ************2.asp************ simei = Request.Form("simei") jusho = Request.Form("jusho") tel = Request.Form("tel") Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.ConnectionString = Server.MapPath("test.mdb") db.open ……クエリを1.htmlで入力された条件のみを反映させたい…… ……が、その書き方がわからない………………………………… Set rs = db.Execute("SELECT テーブル名.* FROM テーブル名 WHERE ((テーブル名.氏名)='" & simei & "')") ……条件が”氏名”だけの場合ならできるのですが、フォームで入力された項目のみを反映させる方法がわからない…………………………… ………………クエリ結果を出力する……………… Response.Write ("" & rs.Fields.Item("氏名") & "") 宜しくお願いします。

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

  • クエリで求めた空き番を登録したい

    詰まってしまったので質問させていただきます。 登録番号の空き番号を求めることが出来るクエリを使い空いている番号を埋めたいと思います。 個人T…テーブル。空き番号をもつ"登録番号"フィールドと空き番号がない綺麗な"連番"フィールドを持つ ZZZZ空き番号抽出クエリ…"登録番号"の空き番号を昇順で並べた"仮想ID"がある Private Sub Sample6() Dim Db As DAO.Database Dim rs As DAO.Recordset Dim i As Variant Dim J As Variant Set Db = CurrentDb Set rs = Db.OpenRecordset("個人T") J = Right(DMax("連番", "個人T"), 4) i = 0 While i < J rs.AddNew i = DMin("仮想ID", "ZZZZ空き番号抽出クエリ") →→ rs(登録番号) = "ZZZZ" & i rs.Update rs.MoveNext Wend End Sub これで実行すると「このコレクションには項目がありません。」 と「rs(登録番号) = "ZZZZ" & i」がエラーになってしまいます。 書き方自体が悪いのはものすごく分かるのですが・・・ どこを直したら正常に空き番号を埋めることができるでしょうか?

  • AccessVBAでの変数の使い方

    下記のような変数の使い方がAccessVBAでできれば 教えていただきたいと思います。 やりたい事は、変数を利用して、フォームやテーブ ル等を利用することです。 例.フォーム「名前1」の「ラベル1」のバリューを 「あいうえお」に変更 --------------------- Dim Class As String '変数に「名前1」を代入 Class = 名前1 'フォーム「名前1」の「ラベル1」の値を変更 Form_Class!ラベル1="あいうえお" --------------------- というように、変数を利用してフォームやテーブル を利用したいのです。 実際このようにすると、Form_Class がそのまま フォーム名ととらえられ、変数として機能しません でした。 宜しくお願いいたします。

  • 変数に入った値を追加したい

    Access97を使用しています。SQLで変数に入った値を追加したいのです。 Dim strSQL, NO3, NO2 As String Dim i As Integer Dim db As DATABASE Dim SN As Variant If (C_Flag = 0) Then SN = 0 Else SN = 1 End If strSQL = "INSERT INTO 連続印刷 (Nフラグ" strSQL = strSQL & ") VALUES (" strSQL = strSQL & "', 'SN'" strSQL = strSQL & ")" Set db = CurrentDb() db.Execute strSQL Set db = Nothing End Sub 上記のようにすると、"SN"のデータが入ります。 'SN'をSNのようにすると、パラメータが少なすぎますと出てきます。 どうすれば、上記 0や1の値を取得することができるのでしょうか?

  • submitの値取得に

    sea_clear_skyです。 [環境] Win98SE PWS フォームに名前が同じ二つのサブミットのボタンを作成します。 そして、飛んだ先のASPのファイルで、サブミットのボタンのV ALUEの値で、IF文で、処理を分岐したいのですが、 Reqest("サブミットボタン名.Value")で 値を取得することができません。 また、hiddenのボタンを作り、サブミットの値を入れて移していますが うまくいきません。 ご教授願います。 [ソース] Response.write"<form action =""ASPファイル"" method=""POST"">" フォームの中身は省略 Response.write"<input type=""submit""value=""更新"" name=""syouhin"">" Response.write"<input type=""submit""value=""次へ"" name=""syouhin"">" Response.write"<input type=""reset""value=""リセット"" name=""syouhin"">" Response.write"<input type=""hidden"" name=""kakushi""value=""&syouhin.value&"">" 飛んだ先のASPファイルのデータ表示 response.write request("shouhin") response.write request("kakushi")

  • フォームの値をうまく出力できない

    フォーム(1.htm)で、質問と答えと入力し、 その結果を次のページ(2.asp)で表示させるASPを作成しました。 以下のように作成したいのですが、うまくいきません。 どうしたらいいのでしょうか。 宜しくお願いします。 ・質問と答えは10個入力されるとはかぎらない ・例えば7個入力されたとき、question1からquestion7まで入力されるとはかぎらない(question2が空欄で、question9に入力される場合もある) ・どのように入力された場合でも、qとaの画像は、q1.gif・a1.gifから 連続で表示されるようにする。 ・フォームで入力されたところを上から順番にq1.gif~、a1.gif~の画像を使って、2.aspに表示させる。 ****1.htm***** <form method="POST" action="2.asp"> <input name="question1" type="text"> <input name="answer1" type="text"> … <input name="question10" type="text"> <input name="answer10" type="text"> </form> ****2.asp************ question1 = Request.Form("question1") answer1 = Request.Form("answer1") … question10 = Request.Form("question10") answer10 = Request.Form("answer10") Response.Write ("<table>") Response.Write ("<tr>") Response.Write ("<td><img src= q1.gif></td>") Response.Write ("<td>" & question1 & "</td>") Response.Write ("</tr>") Response.Write ("<tr>") Response.Write ("<td><img src= a1.gif></td>") Response.Write ("<td>" & answer1 & "</td>") Response.Write ("</tr>") … Response.Write ("<tr>") Response.Write ("<td><img src= q10.gif></td>") Response.Write ("<td>" & question10 & "</td>") Response.Write ("</tr>") Response.Write ("<tr>") Response.Write ("<td><img src= a10.gif></td>") Response.Write ("<td>" & answer10 & "</td>") Response.Write ("</tr>") Response.Write ("</table>")