プロが教えるわが家の防犯対策術!

ASPでmdbファイルからデータを抽出したいのですが、うまくいきません。

TABLE1に以下のレコードがあるとします(MS-ACCESS)

ID,RANK1,RANK2(TABLE1)
1,1,1
2,1,2
3,1,3
4,2,1
5,2,2
6,2,3

RANK1、RANK2は以下のテーブルを参照し

RANK,RANK_NAME(TABLE2)
1,上
2,中
2,下

このように表示させたいのです。

1,上,上
2,上,中
3,上,下
4,中,上
5,中,中
6,中,下

しかし、ACCESSのクエリーでは動作するのですが、ASPでは上中下が表示されません。

以下ASPで記述したSQL文です

SELECT TABLE1.ID, RANK1.RANK_NAME, RANK2.RANK_NAME
FROM (TABLE1 INNER JOIN TABLE2 AS RANK1 ON TABLE1.RANK1 = RANK1.RANK) INNER JOIN TABLE2 AS RANK2 ON TABLE1.RANK2 = RANK2.RANK;

何か悪いのでしょうか?
宜しくお願いいたします。

A 回答 (3件)

#2です。

すみません!AS見落としてました。SQL文は合ってますね。

取り出しの記述はどのように記述してますか?
下記のような記述で表示されましたが・・・
試してみてください。

Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\bks\main.mdb;"

sql="SELECT TABLE1.ID, RANK1.RANK_NAME, RANK2.RANK_NAME "
sql=sql&"FROM (TABLE1 INNER JOIN TABLE2 AS RANK1 ON TABLE1.RANK1 = RANK1.RANK) INNER JOIN TABLE2 AS RANK2 ON TABLE1.RANK2 = RANK2.RANK;"
Set rs=cn.Execute( sql )
%>
<table>
<%Do While Not rs.EOF'パターン1======================================%>
<tr>
<td><%=rs.Fields("ID")%></td>
<td><%=rs.Fields("RANK1.RANK_NAME")%></td>
<td><%=rs.Fields("RANK2.RANK_NAME")%></td>
</tr>
<%rs.Movenext
Loop
%>
</table>
<%rs.MoveFirst'パターン2=======================================
Do While Not rs.EOF
Response.Write "<table><tr>"
For Each fd In rs.Fields
Response.Write "<td>"&fd.value&"</td>"
Next
Response.Write "</tr></table>"
rs.Movenext
Loop
%>
    • good
    • 0

SQL文の記述の仕方がちょっと違うように思います。


selectで「RANK1.RANK_NAME」と指定してますが、
RANK1テーブルはないですよね?(RANK1はフィールド名ですよね?)
「○○.△△」の○○はテーブル名を、△△はフィールド名を指定します。

下記のSQL文で試してみてください。
SELECT TABLE1.ID, TABLE2.RANK_NAME AS RANK_NAME1, TABLE2_1.RANK_NAME AS RANK_NAME2
FROM (TABLE1 INNER JOIN TABLE2 ON TABLE1.RANK1 = TABLE2.RANK) INNER JOIN TABLE2 AS TABLE2_1 ON TABLE1.RANK2 = TABLE2_1.RANK;

結果は「ID」,「RANK_NAME1」,「RANK_NAME2」で取り出せます。

Accessのクエリーで動作したとのことですが、
クエリーのデザイン画面でメニューバー「クエリ」→「SQL」→「パススルー」を
選択するとそのSQL文が表示されますので、そのままコピーして
ASPに記述するとたいてい動きますよ。
(中にはASP用に変更しなければならない場合もありますが)

参考になれば幸いです。

この回答への補足

RANK1.RANK_NAMEの”RANK1”は”TABLE2 AS RANK1”のつもりで書いています。
もしかしたら、新しく名付けたテーブル名とフィルド名が同じにしてしまった事が、動作しない原因でしょうか?

お手数ですが、テーブル名を
TABLE1→LIST
TALBE2→RANK_CD
とした場合の,書き方を教えていただけませんか?

補足日時:2003/04/21 09:49
    • good
    • 0

ASP側でバグっているのでは?


おそらくADOを使われているのだと思いますが、そのコードをMS-Accessに持ってきて正当性を確認してみるとか。

この回答への補足

アドバイスありがとうございます。
おっしゃる通り、APSでADOを使っております。

記述したSQL文はMS-ACCESSでは正常に動作しています。
ASPでは「TABLE2 AS RANK1」と言う記述ができないのでしょうか?

補足日時:2003/04/21 09:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!