• ベストアンサー

MS Accessでデータ呼び出しについて

いつもお世話になっています。 めちゃくちゃ初心者です。 早速ですが質問させてください。 Access2000を使用してデータベースを作成しWEB上でデータ管理できるようにしたいとプログラミングしています。 ABCテーブルの中に  A    B    C 111  222  333 444  555  666 777  888  999 と、いったように複数のデータがあります。 このデータを <SELECT><OPTION>○○○</OPTION></SELECT>の構文(?)を使用して △△△ 111/222/333      444/555/666      777/888/999 といったようなプルダウン表示にしたいと思っています。 縦方向(1・4・7)には任意に情報が追加されていきます。 SQL = "SELECT * FROM ABCMaster Order By A" Set rs = db.Execute(SQL) If Not RS.BOF Then Do While Not RS.EOF a="" & RS("A") & "/" & RS("B") & "/" & RS("C") & "" Response.Write "Select name=""III""><OPTION>" & a & "</OPTION></SELECT>" Session("A" & tmpIndex)=rs("A") RS.MoveNext tmpIndex=tmpIndex+1 Loop Else ・ ・ ・ ボクにはこの程度までしか組めませんでした。 これだと当然ですがプルダウンリスト(?)がいくつも出てきますし中に表示されるものは同じものになってしまいます。 ただ、1行目の111/222/333はちゃんと表示されます。これを2行目以降追加するようにしたいのです。 作成しているファイルは任意名.aspという拡張子のものになります。 質問の意味自体がおかしいかもしれませんし、 やろうとしていること自体が間違っているのかもしれませんが、今週中にはある程度の形に仕上げないといけないのでどんなアドバイスでも良いのでよろしくお願いします。

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

  • ベストアンサー
  • Te-Sho
  • ベストアンサー率52% (247/472)
回答No.2

htmlの部分ですがSELECTタグをループさせているために セレクトボックスがレコード数出てしまいますね。 ------------------------------------------------ SQL = "SELECT * FROM ABCMaster Order By A" Set rs = db.Execute(SQL) If Not RS.BOF Then Response.Write "<Select name=""III"">" Do While Not RS.EOF a="" & RS("A") & "/" & RS("B") & "/" & RS("C") & "" Response.Write "<OPTION values=" & tmpIndex & ">" & a & "</OPTION>" Session("A" & tmpIndex)=rs("A") RS.MoveNext tmpIndex=tmpIndex+1 Loop Response.Write "</SELECT>" Else ・ ・ ・ ------------------------------------------------ とループの外に<select>タグを追い出してみてください。

MIYABF5D
質問者

お礼

ありがとうございます! #1にて同様の答えをいただいたのですが<SELECT>タグを外に出したらエラーになってしまいちょっと困っていました。 その都度Response.Writeが必要なのを忘れていました。 上記記述も前担当者の他の記述を流用しているので、 なぜこのような記述になるのかを調べながら作業しています。 未だにわからないけど動いているからいいや。みたいなとこもしばしば。。。(汗) 記述していただいたおかげでなんとか解決できました。 本当にありがとうございます! また度々ここでお世話になるかと思いますがその節はまたよろしくお願いします。

その他の回答 (1)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

まず、ASPの仕組みを知っておいてください。 サーバー側でHTMLファイルを作って、それをクライアントに送信するのです。 つまり、HTMLを知らなければ、当然ASPは扱えません。 <SELECT> <OPTION> </OPTION> </SELECT> はHTMLです。 今回、うまくいかないのは、DBの扱い方は関係なく、あなたがHTMLをわかっていないためです。 <SELECT>タグは、プルダウンメニューを表示します。 中身は<OPTION>タグで指定します。 中身が複数の場合は、 <SELECT> <OPTION>A <OPTION>B <OPTION>C </SELECT> のようになります。 今は、 a="" & RS("A") & "/" & RS("B") & "/" & RS("C") & "" Response.Write "Select name=""III""><OPTION>" & a & "</OPTION></SELECT>" の中に</SELECT>が入っているため、 <SELECT><OPTION>A</OPTION></SELECT> <SELECT><OPTION>B</OPTION></SELECT> <SELECT><OPTION>C</OPTION></SELECT> のようになっているのではないでしょうか。 <SELECT>タグを出力する場所をループの外側にすればいいはずです。

MIYABF5D
質問者

お礼

おっしゃる通りHTMLやVB、ASPなど単語は知っていても意味はさっぱりという感じです。 前の担当者が辞めていきなり放り込まれた部署で、 大した引継ぎも無くプログラム作成に。。。 前の担当者が残したものを頼りに似たような動作をする記述を探って更新して書き直しての作業の繰り返しをしています。 ループを外側に持っていくと「ステートメントがありません」ってエラーがでて困って先ほどのような記述になりました。 #2の方の記述を参考にしたらできました。 ありがとうございます。 また何かありましたらよろしくお願いします

関連するQ&A

  • レコードセットのループ処理でエラー・・・

    簡単なことだと思うのですが、解決できなくこまっております。お助けください。 以下のコーディングで、データの取得は出来ているのですが、「Do Until rs1.EOF」でエラーとなります。 SOURCE----------------------------------------- sql = "Select No from t01" Recordset.Open sql, dbc, 3 If rs1.EOF Then Response.Write "データナシ<BR>" ←表示されません。 else Do Until rs1.EOF ←この行でエラーとなります。 Response.Write "No=" & rs1("No").Value rs1.MoveNext Loop end if Error-------------------------------------------- ADODB.Field (0x80020009) BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。 因みに、Do Untilを使用せず  Response.Write "No=" & rs1("No").Value  rs1.MoveNext  Response.Write "No=" & rs1("No").Value と記述すると正常にデータが表示されます。 「Do Until rs1.EOF」で発生するエラーの回避方法を御教示願います。

  • JavaScript+ASPによるaccessのデータの追加、削除

    JavascriptでASP(IIS)を使ってAccess2000にあるデータをブラウザに表示する事はできたのですが、今度はaccessにあるデータを追加、削除したいのですが、SQLを変えてもエラーがでます。 どのようにしたらいいですか?教えてください。 初心者なもんで、質問が分かりにくいと思いますが、お許しください。どうぞ、よろしくお願いします。 <%@Language="JavaScript" %> <html> <head> <title>一覧→詳細</title> </head> <body> <table border="1"> <tr> <th>商品コード</th><th>商品名</th><th>価格</th> </tr> <% var db=new ActiveXobject("ADODB.Connection"); db.Open("Webware"); var rs=db.Execute("SELECT * FROM products"); while(!rs.EOF){ %> <tr> <td><a href="descj.asp?id=<%=Server.URLEncode(rs("id"))%>"> <%rs("id")%></a></td> <td><%=rs("nam")%></td> <td><%="\\" + rs("val") %></td> </tr> <% rs.MoveNext(); } %> </table> </body> </html>

  • ADO接続からのACCESSデータシートへの表示について

    ADO接続して、ACCESSのデータシートへ表示できないので、困っております。下記の処理を実行すると、テーブルの最後データ行(1行)しかデータシートへ表示できません。 Debug.printにて、データは正しく抽出できることは確認しており、おそらくACCESSデータシートが新しく追加できないことが原因だと思います。 わかる方がいらっしゃいましたら、ご指導いただけないでしょうか。 ●以下にソース記述 -------------------------------------------------- Private Sub Form_Load() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim StrSQL As String Set cn = CurrentProject.Connection StrSQL = "SELECT * " _ & "FROM LIST; " Set rs = New ADODB.Recordset rs.Open StrSQL, cn, adOpenKeyset, adLockReadOnly Do Until rs.EOF Forms![F_LIST抽出]![ID] = rs!ID_LIST Forms![F_LIST抽出]![NAME] = rs!NAME_LIST rs.MoveNext Loop rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ------------------------------------------------ フォーム(F_LIST抽出)を開くと、LIST(テーブル)のID_LISTとrs!NAME_LISTをデータシートを表示 ※フォームでは、ただデータシートを表示している ●わからないこと  たとえば、99件あるレコードをフォームから表示する と1行しか表示されず、そのデータは99件目が表示される。

  • 次データ取得エラーについて

    sea_clear_sky8です。 [環境] OS 98SE PWS [質問内容] SQL CMD.CommandText = "SELECT * from test_t" このSQLだと下記のソースの部分が通り、データを表示 させることができます。 でも、 SQL CMD.CommandText = "select * from test_t " & _ "where name like '%" & Request("nm") & "%' " & _ "order by id " & _ "limit " & Request("page_num")*10 & ",10" だと次データ取得エラーと表示され、エラー番号3251が表示され 二つ目のデータから取得できません。 忙しいところすいませんが、ご教授願います。 エラー番号等で、インターネットで調べましたが、原因がわからない 状態です。よろしくお願いします。 [ソース] Do UntiL RS.EOF=true For i = 0 to RS.Fields.Count-1 Response.write RS(i).name k = RS(i).name + CSTR(RS.bookmark) Response.write "<input name="&k&" value="&RS(i)&">" next Response.write "<BR>" RS.MoveNext Loop

  • ACCESSでデータセット時、項目を可変にしたい

    よろしくお願いしますm(__)m MDBであるテーブルのある項目に、データを セットする際、項目名を可変にしたいのですが、 方法が分からないので、教えて下さい><; Public Sub AAA(テ As String, 項 As String) SQL = "select" & 項 SQL = SQL$ & " from " & テ Set rs = cdb.OpenRecordset(SQL) Do Until rs.EOF rs.Edit ********************************************** rs![項] = "あいう" ←入れ先を可変にしたい ********************************************** rs.Update rs.MoveNext Loop

  • 指定した行から指定した行数文データを取得したい

    WEB上で、1ページ10行のデータを表示したいので、 10行ずつデータを取得できるSQLを書きたいと思うのですが、方法が分かりません。 参考書に 41行目から50行目を取得する方法として SELECT TOP 10 A,B FROM MyTable WHERE keyID Not IN (SELECT TOP 40 keyID FROM myTable) とかかれていました。 この場合、データが keyID,A,B 1,A1,B1 2,A2,B2 ・ ・ ・ 40,A*,B* 41,A*,B* ・ ・ とkeyIDが重複しない時ですよね。 主キーが複数あるときはどのようなSQL文にすればいいのでしょうか?

  • ACCESSのSQL文

    ACCESSのSQL文 いつもお世話になります。 SQL文でテーブルのデータを抽出したいのですが上手くいきません。 Dim rs4 As ADODB.Recordset Dim cmdrs4 As New ADODB.Command Set cmdrs4.ActiveConnection = CurrentProject.Connection a = "SELECT 管理NO" & " FROM マスタ" If strFlter = "" Then a = a & ";" Else a = a & " WHERE " & strFlter & ";" End If cmdrs4.CommandText = a Set rs4 = cmdrs4.Execute() MsgBox rs4.GetString aの内容は a = "SELECT 管理NO FROM マスタ WHERE 管理NO Like ""*2*"";" 実行すると、rs4.GetString文で下記エラーが出ます。 「BOFとEOFのいづれかがTrueになっているか、または現在のレコードが削除されています。 要求された操作には、現在のレコードが必要です。」 aを "SELECT 管理NO FROM マスタ WHERE 管理NO = ""2-6"";" なら問題ありません。 Likeの使い方が悪いのでしょうか? よろしくお願いします。

  • レコードが存在しなかった場合

    教えてください。 Vbscript初心者です。 SQLでデータを取得した後の構文で以下のような記述があります。 もしレコードが存在しなかった場合に Response.write(”レコードが存在しません")と表示したいです。 IIf Rs.RecordCount=0 Then Response.write("レコードが存在しません") End If のような書き方をどこかに入れようとしているのですが、以下のようなメッセージが表示されてしまいます。どのように書けば宜しいでしょうか? ADODB.Field エラー '800a0bcd' BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。 よろしくお願い致します。 **************************** SQL文や接続の記述 <% Do While not Rs.EOF = True  Response.Write・・・   Rs.MoveNext Loop Rs.Close Set Rs = Nothing Con.Close Set Con = Nothing %> **************************

  • オラクルからAccessにデータ追加

    オラクルから、必要なデータを抜出し加工の為のDBをAccessで作成していますが、オラクルから抜き出したデータ(レコードセット)を、どうやってAccessのテーブルに書き込めばよいかがわかりません。 ◎環境 Oracle:10g Access:2010 ◎現在の状況 Dim CON As New ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Dim i As Integer 'DB接続定義 CON.Open "DSN=DNS名;UID=ユーザー名;PWD=パスワード;" 'SQL文 SQL = "SELECT " SQL = SQL & "カラム1," SQL = SQL & "カラム2," SQL = SQL & "カラム3" SQL = SQL & "FROM オラクルテーブル名 " SQL = SQL & "WHERE 抽出条件 " SQL = SQL & "AND 抽出条件" SQL = SQL & "GROUP BY カラム" SET RS = CON.EXCUTE(SQL) For i = 1 To 10 Debug.Print rs(カラム1) & rs(カラム2) next i ここまでは、オラクルのテーブルから、レコードセットにデータが取り込まれてます。 rs.close: SET RS = Nothing con.close:SET CON=Nothing end sub 案1 レコードセットのデータを、Access側のテーブルにループで回して、1行ずつデータ追加 案2 INTO句で直接、テーブル作成 調べていて、2通りのやり方があると思うのですが、どちらにしても、テーブルへの書き込み方がわかりません。 案1の場合、Access側のテーブルを開いてデータ追加する方法 ※同時に2つのテーブルを開くことになるのでは? 案2の場合、SQL文はオラクルで処理する為の物なので、AccessテーブルのINTO句が使えるのか? オラクルのテーブルをリンクする事も考えたのですが、実際動かすPCにはAccessRuntimeしかインストールしてませんので、オラクルのテーブルをリンクしてくれませんでした。 よい方法があれば、アドバイスを頂けたら幸いです。

  • プルダウンメニューの選択肢の保持について

    こちらにはだいぶお世話になっています。 perlとpostgresを使用してcgiを作成しているのですが、 下記のコードでプルダウンメニューにDBの値を入れて、 DBにデータが追加されてもプルダウンにもデータが追加されているプルダウンメニューを作りました。 $sql="select * from testtable order by code"; $result = $conn -> prepare($sql1); $ref = $result -> execute; while(@ref = $result->fetchrow){ $options.="<option value='$ref[0]'>$ref[1]</option>\n"; } $select="<select name=''>\n<option value=''>選択してください</option>\n$options</select>\n"; print "$select"; データの検索時にこのプルダウンメニューを使っているのですが、選らんだ選択肢を例えばBとして 送信すると、一番上の「選択してください」に戻ってしまします。 これを送信してもその時選択した選択肢を残すやり方を教えて頂けますでしょうか? testtableの中身:      プルダウンメニュー化 |code|name|      |選択してください▼| | 1 | A |         |    A    | | 2 | B |        → |    B    | | 3 | C |         |    C    | | 4 | D |         |    D    |