MSDE FunClub
Microsoft Data Engine FunClub
MSDE初心者向けメーリングリスト過去ログ[1081]番
 
[TOP]>[MSDE初心者向けメーリングリスト過去ログ(1081番)]>[ウィンドを閉じる]
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
ウィンドを閉じる
MSDE/SQLServer FAQ
MSDE / MSDE2000 
技術情報サポート
初心者向け
メーリングリスト
過去ログの表示
技術者向け
メーリングリスト
過去ログの表示
メーリングリスト
活動状況の
表示
MSDE TOP メニュー
MSDEトップメニューに移動します
 

 
Re: ACCESS ADP 一時テーブルを基にしたレポートで「オブジェクトが無効です。」のエラー

Date: Mon, 1 Mar 2004 15:20:51 +0900
From: "Akira Horikawa" <who@example.ne.jp>


堀川です、こんにちは

-----Original Message-----
From: KojiFujita [mailto:who@example.co.jp] 
Sent: Monday, March 01, 2004 12:45 PM
To: who@example.ne.jp
Subject: [ml-msde-beg:01079] Re: ACCESS   ADP  一時テーブルを基にしたレポートで「オブジェクトが無効です。」のエラー


>SP内で 一時テーブルを認識できないていないということはわかりました。
>tempdb内でいくつも存在する一時テーブルの中から必要なものを指定する際には、
>「#テーブル______________〜」
>の形ででないと認識できないということでしょうか?


私がポイントとしてお話した
 『SQLServer側で提供される様々なGUIツールを駆使すると調べられます』
の意味は、せっかくSQLServerのライセンスをお持ちなのだから付属ツールを
有効にお使いくださいという意味だったのです。

Enterprise Managerでも簡単な調査はできます。

Enterprise Managerの
     [管理]-[現在の利用状況]-[プロセス情報]
のところで、Accessプロジェクトから接続されたサーバーの状況を見て下さい
3個の接続があるはずです。

しかしEnterprise Managerで調査するのは、ここまでが限界です。

そこで私がヒントで与えたGUIツールとは、「プロファイラ」を使って下さいと
言いたかったのです

プロファイラを実行させて、サーバーの動作状況をすべて『盗聴』します。
各データベースサーバープロセスが、どのようなSQL文を実行しているのかを
調べることが出来ます。

盗聴したSQL文から、だいたいのことが推測されます。

まず最初にAccessプロジェクトが立ち上がって、最初の接続が作成されます。
この接続はAccessのシステムが保持します

次に、ユーザ側アプリケーションのための接続が開かれます。
この接続が、CurrentProject用の接続です。

そして3番目の接続が開かれます
この接続は、レポートを開く時のRecordSourceに記述された内容を取得する時に
使われるようです
この接続の説明は、Accessプロジェクトのマニュアルには書かれておりません

このことから、レポートのRecordSourceに記述されたSQL文が実行される接続と
フォーム等の接続が異なるため、一時テーブルの参照はできません。


しかし次のことを試してください

レポートのRecordSourceプロパティを使うのではなく、Recordsetプロパティを
使います
すでに存在するRecordsetオブジェクトに対して、連結レポートを作成することが
できます。


例えば、フォームのイベント処理で、

Private Sub コマンド1_Click()
  Set cn = CurrentProject.Connection
  cn.Execute "Create table #tmp(運送コード int , 運送会社 varchar(40),電話番号 varchar(24))"
  cn.Execute "INSERT INTO #tmp(運送コード , 運送会社,電話番号 ) values(10,'AAAA','03-3333-1111')"
  cn.Execute "INSERT INTO #tmp(運送コード , 運送会社,電話番号 ) values(20,'BBBB','03-3333-2222')"
  cn.Execute "INSERT INTO #tmp(運送コード , 運送会社,電話番号 ) values(30,'CCCC','03-3333-3333')"
End Sub

を実行して、一時テーブルを作成します。


この一時テーブルに対して、レポート側では、

Private Sub Report_Open(Cancel As Integer)
  Dim cn, rs
  Set cn = CurrentProject.Connection
  Set rs = cn.Execute("SELECT * from #tmp")
  Set Me.Recordset = rs
End Sub

のように、ADOのレコードセットオブジェクトを生成し(この生成に使用する
接続はフォームで一時テーブルを作成した接続とおなじもの)、そのレコード
セットオブジェクトを直接レポートのRecordsetオブジェクトに代入してみて
下さい

この方法でレポートの表示ができるはずです。


------------------------------------
(株)日本技術ソフト開発
        堀川 明  (Akira Horikawa)
    03月01日(月曜日) 15時19分記
        mailto:who@example.ne.jp
        http://www.horikawa.ne.jp/msde/



[MSDE/SQLServerに関して、今、どんなことにお困りですか?]
よろしければお困りの内容を、電子メールで教えて下さい。
質問を電子メールで作成する


[ウィンドを閉じる]

[MSDE/SQLServer FAQ ]

[MSDE / MSDE2000 技術サポート情報一覧]

MSDE TOP ページに移動する

 
 
 
 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。