- ベストアンサー
ASPでデータベースを結合して表示させる方法について
こんばんわ。 今、ASPでAccessにデータを登録したり削除したり、Accessのデータを検索したりするページを作ってみています。 登録はうまくできるようになったのですが、文字列をキーにしてデータベースを検索し、その結果をASPで表示させる際、データを結合して表示させることってできますでしょうか? 具体的には、 アクセスのフィールド名は名前(姓)、名前(名)と別れているのですが、ASPで表示させるときは一覧表の中で、名前と姓をくっつけて、表示させたいと思っています。 <アクセス> 名前(姓) | 名前(名) | 生年月日 山田 | 太郎 | 1900/8/1 <ASPでの表示> 名前 | 生年月日 山田 太郎 | 1900/8/1 以上、宜しくご教授ください。。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
SQL文の文字列連結方法が「&」ではなく、「+」で行う必要があります。 SQL自体の文字列連結を「&」でやっているためにエラーになっていると思いますので、下記のようにやってみてください。 set db = CreateObject("ADODB.Connection") set rec = CReateObject("ADODB.Recordset") db="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & _ Server.Mappath("meibo.mdb") StrSQL = "" StrSQL = StrSQL & "select " StrSQL = StrSQL & " name_sei_kan + name_na_kan as name," StrSQL = StrSQL & " name_sei_hira + name_na_hira as hira, " StrSQL = StrSQL & " post_number, " StrSQL = StrSQL & " pref + city + mansion as jyusyo, " StrSQL = StrSQL & " dochi, " StrSQL = StrSQL & " kankei, " StrSQL = StrSQL & " print " StrSQL = StrSQL & " from meibo order by name_sei_kan" & "" 以上、ご参考になれば幸いです。
その他の回答 (2)
あなたがダメと言っているのは、文字列の連結以前のところですので、まずは文字列の連結はおいといて、名前だけを一覧表示するように作ってみてはどうですか? No.1の回答者さんのコードで動かなかったから、下記の独自のコードを書いたのでしょうか? Set rec1 = rec.open(StrSQL) このコードは、まったく意味が通りません。 データベースからデータを取得するには、 まず、データベースをオープンする必要があります。 そのうえで、オープンしたデータベースに対して、SQL を発行し、レコードセットを取得する必要があります。 No.1の回答者さんのコードは、少なくともそういう作りになっています(私は実際試した訳ではありませんが)。
お礼
ご回答ありがとうございました。 ちょっと構文について勉強不足でした。 もう少し勉強いたします
- redfox63
- ベストアンサー率71% (1325/1856)
やり方しだいだと思いますよ 1) DBへ投げる SQLでフィールドの結合を行う 2) ASP側でフィールドの結合を行う Table名 Sample 名前(姓) Name1 名前(名) Name2 生年月日 Birthday といったテーブル構造でADOで接続なら set cn = CreateObject("ADODB.Connection") set rs = CReateObject("ADODB.Recordset") cn.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" & Server.MapPath("Sample04.mdb") cn.Open rs.open "SELECT Name1 & Name2 as Name, Birthday From Sample",cn,2,3,1 とすれば rs(0)『または rs("Name")』に姓、名の連結されたデータを取得できます rs.open "SELECT Name1, Name2, Birthday From Sample",cn,2,3,1 とすると rs(0)に姓、rs(1)に名が取得できるので Respose.Writeなどで rs(0) & rs(1) などといった使い方ができるでしょう データの表示方法などをどのようにするか提示した方がより適切なアドバイスが得られるでしょう
補足
ご回答ありがとうございます。 勉強中なのでいまいちわからなかったのですが、頂いた アドバイスを参考に下記のように明記しましたがダメでした。 set db = CreateObject("ADODB.Connection") set rec = CReateObject("ADODB.Recordset") db="Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & _ Server.Mappath("meibo.mdb") StrSQL = "" StrSQL = StrSQL & "select " StrSQL = StrSQL & " name_sei_kan & name_na_kan as name," StrSQL = StrSQL & " name_sei_hira & name_na_hira as hira, " StrSQL = StrSQL & " post_number, " StrSQL = StrSQL & " pref & city & mansion as jyusyo, " StrSQL = StrSQL & " dochi, " StrSQL = StrSQL & " kankei, " StrSQL = StrSQL & " print " StrSQL = StrSQL & " from meibo order by name_sei_kan" & "" Set rec1 = rec.open(StrSQL) ( Set rec1 = rec.Execute(StrSQL)←これも試したがダメでした) 提示いただいたサンプルと比較すると『cn,2,3,1』に相当する部分の意味がちょっとわからなかったのですが、これが問題なのでしょうか? それとも根本的にどこか違うのでしょうか? 非常に抽象的で大変恐縮ですが、アドバイスいただけると助かります。 すみませんが宜しくお願い致します。
お礼
ありがとうございます。勉強になりました。