出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

ASPとデータベースの連携について   noriさん [2001/10/12 19:20:09] [718]
  Re:ASPとデータベースの連携について   Tomitomiさん [2001/10/12 19:56:59] [719]
    Re:ASPとデータベースの連携について   noriさん [2001/10/15 18:00:32] [740]

[718] ASPとデータベースの連携について
投稿者:noriさん 2001/10/12 19:20:09
noriと申します。
いつもお世話になっております。

現在WEBアプリケーションを開発しておりますが、ASPとデータベース(ACCESS2000)との連携がどうもうまくいかない部分があり質問させていただきます。

ASPからACCESS2000で作成したYUZAテーブルとCALENテーブルという2つのテーブルから
SQL文を使用してデータを抽出しようと思っているのですが、ConnectionオブジェクトのExecuteメソッドのパラメータにSQL文を与え実行をすると実行はされるのですが、実行後RecordsetオブジェクトのRecordCountプロパティを参照しても-1が返され、必要なデータが抽出されません。

データベースのテーブル名:YUZAとCALEN
YUZAテーブルのフィールド:ID、NAME、MAIL(データ型はすべてテキスト型50文字)
CALENテーブルのフィールド:ID、9月21日〜10月20日という日付30個のフィールドです。
------------------------
9月21日|9月22日|9月23日 ・・・・このような感じで作成してあります。
------------------------
データ型はすべてテキスト型50文字です。

各フィールドに格納しているデータは
YUZAテーブルのIDには、akatjdkaleなどのIDになる文字列、NAMEには個人名、MAILにはメールアドレスが格納

CALENテーブルのIDには、YUZAテーブル同様IDになる文字列、各日付に対応したフィールドには、9月21日というフィールドには9月21日というデータが文字列で格納されています。

環境はWidows2000Server
サーバIIS5.0
データベースACCESS2000
データベースの接続はMicrosoft.Jet.OLEDB.4.0

ちなみに以下のコードで実行しております。

<%
Todays = FormatDateTime(Date,1)

Response.Write "<b>" & Todays & "分集計</b><p>"

'当日日付をCALENテーブルのフィールド形式に合わせる
fldDay = CStr(Mid(Todays,6,6))

'DBに接続し当日分の注文状況取得

Set cn = Server.CreateObject("ADODB.Connection")
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.ConnectionString = Server.MapPath("../bento.mdb")
cn.Open

'YUZAテーブルのID,NAMEとCALENテーブルの当日の日付レコードを抽出
'CALEN.fldDayの前後にシングルクォーテーションがありますが、これがないと
'CALEN.10月12日の演算子がありませんというエラーになります。

strSQL = "SELECT YUZA.NAME," & "'CALEN." & fldDay & "' FROM YUZA INNER JOIN CALEN ON YUZA.ID=CALEN.ID"

'この状態で実行すると実行はされます。
Set rs = cn.Execute(strSQL)

'-1が返される
Response.Write rs.RecordCount & "<br>"

Do While Not rs.EOF
'---抽出レコードに関する処理----
rs.MoveNext
Loop

'-----以下省略------
%>

ゴチャゴチャして分かりにくい部分もあるかも知れませんが、ご教授のほどよろしくお願いいたします。

[719] Re:ASPとデータベースの連携について
投稿者:Tomitomiさん 2001/10/12 19:56:59
こんばんわ、Tomitomiです。
わかる分だけ。

> 現在WEBアプリケーションを開発しておりますが、ASPとデータベース(ACCESS2000)との連携がどうもうまくいかない部分があり質問させていただきます。
>
> ASPからACCESS2000で作成したYUZAテーブルとCALENテーブルという2つのテーブルから
> SQL文を使用してデータを抽出しようと思っているのですが、ConnectionオブジェクトのExecuteメソッドのパラメータにSQL文を与え実行をすると実行はされるのですが、実行後RecordsetオブジェクトのRecordCountプロパティを参照しても-1が返され、必要なデータが抽出されません。


前にどこかのホームページで見たのですが、
Set rs = cn.Execute(strSQL)

では、正確にはレコードセットにはならないので
SET REC = Server.CreateObject("ADODB.Recordset")
REC.OPEN "SELECT * FROM TOPIC",DB

のほうが、のぞましいと見た覚えがあります。

また
http://www2.gihyo.co.jp/text.asp?ID=150&P=1

--------------------------------------------------------------------
RecordsetのCursorLocation = adUseServerのとき(デフォルト)
 レコードセットのCursorType = adOpenKeyset / adOpenStaticのとき
RecordCountは正しい値を返す。
 レコードセットのCursorType = adOpenForwardOnly / adOpenDynamicのとき
RecordCountは-1となり、正しい値を返さない。
--------------------------------------------------------------------
と書いてありました。
ご参考になれば幸いです。

[740] Re:ASPとデータベースの連携について
投稿者:noriさん 2001/10/15 18:00:32
noriです。いつもお世話になっております。
こんばんわ、Tomitomi様。

> --------------------------------------------------------------------
> RecordsetのCursorLocation = adUseServerのとき(デフォルト)
>  レコードセットのCursorType = adOpenKeyset / adOpenStaticのとき
> RecordCountは正しい値を返す。
>  レコードセットのCursorType = adOpenForwardOnly / adOpenDynamicのとき
> RecordCountは-1となり、正しい値を返さない。
> --------------------------------------------------------------------
> と書いてありました。

大変参考になりました。

どうも、原因はCursorTypeにあったようです。デフォルトの adOpenForwardOnlyで処理していたためのようです。
CursorTypeをadOpenKeysetに変更したらレコードの数だけ値を返しました。

また何かありましたらよろしくご教授のほどお願いします。



TreeBBS For ASP V.0.1.3
Program By YasNet