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

 
Re: 一時テーブルについて 2

Date: Thu, 8 Jun 2000 14:39:40 +0900
From: "Madoka Takai" <who@sub.example.jp>


はじめまして、山田さん。
はじめてのMSDE+Access2000の仕事も無事終了し、
暇になりましたので参考になれば私の使用方法でどうでしょう?
裏技にもならないですが...

>レポートのレコードソースには一時テーブルを
>指定できないようなんです。
>一時テーブルをもとにしたレポートは
>可能なのでしょうか?
堀川さんの言うようにどのようにして、作成しているのでしょうか?
複数端末を考慮する場合でしょうか?
一時テーブルを使用する=SQLサーバーは1日に一度はリブートするのでしょうか
?
一時テーブルの削除タイミングは?

櫻井 隆さんのHP(仕事はじめに大変参考になりました。)
http://www2p.biglobe.ne.jp/~sakurait/cstrue/cl1999/cl1999c4.html
にMDBを使用した例が書かれていますが、
レポートはRecordsetプロパティを使用していないのでダメですね。

Ans
 1.複数端末を考慮しない場合ならば##を使う。印刷後DORPしましょう。
   私は##よりも tempdb..一時テーブル名 と記述しますが...
   この場合レポートのOpenでDROPしても、なぜか動くAccessは不
思議。

 2.端末IDを利用して1つのテーブルを複数端末で使う。
   一時テーブルに端末IDフィールドを持ち、insert する時に@@SPIDをSET
する。
   印刷後自分の使用した@@SPIDのレコードを削除する。

 3.印刷のみ別MDB(MDE)にし印刷。
   ADOにてSQLServer7.0の印刷したいレコードを別MDBのテーブ
ルにinsertし、
   Shell 関数やAPIなどで呼び出す。

 4.1の変形ですが、レポートのレコードソースにはストアドプロシージャ(S
P)をSETする。
   そのSPで、他の端末で使用中はReturnを5を返すので 他端末で使用
Messageを返す。
      Openreportの前にSPをコールし、Returnが0ならばレポートOPENがいいで
しょう。
      複数端末の場合は、レポートのOpenイベントの最後でDROPして下さい。
      これなら掴んでいる時間も短いですよ。
   同時に同じ帳票をそんなに印刷するんでしょうか?
   状況が分からないので...
   以下にサンプル

CREATE PROCEDURE Q_Wテーブル印刷
AS
  set nocount on

  if exists (select * from tempdb.dbo.sysobjects where id =
object_id(N'[tempdb].[dbo].[W_テーブル]'))
    return(5) --他の端末で使用中
--  drop table [tempdb].[dbo].[W_テーブル] 複数端末を意識しないならばコメン
ト削除

-- W_テーブルを作成する
  CREATE TABLE [tempdb].[dbo].[W_テーブル]
         (
           Feild1      char (1)   NOT NULL --好きなフィールド
          ,Feild2      char(120) NULL      --好きなフィールド
         )
  if @@error <> 0  return(99) --このサンプルではエラー時99を返す。


-- Declare the variables used in error checking.
  DECLARE @error_var int, @rowcount_var int

-- データレコードの準備をする
  insert into [tempdb].[dbo].[W_テーブル](
                               Feild1 --insertしたいフィールド
                             , Feild2 --insertしたいフィールド
                           )
                     values(
                               '1' --insertしたい値
                             , '1' --insertしたい値
                           )

  if @@error <> 0  return(99) --このサンプルではエラー時99を返す。

  SELECT * FROM [tempdb].[dbo].[W_テーブル]
-- Save the @@ERROR and @@ROWCOUNT values in local
-- variables before they are cleared.
  SELECT @error_var = @@ERROR, @rowcount_var = @@ROWCOUNT
  IF @error_var <> 0 return(99) --このサンプルではエラー時99を返す。
  IF @rowcount_var = 0 return(4)  --このサンプルではデータなしの場合4を返す
--終了処理
  return(0) --正常なら0

フォームでの一時テーブルはOKだったのですか?
フォームの場合Comオブジェクトを作成し、RecordsetにSetすればOKですね。
でも上記の場合も接続IDは同じでないと#テーブルは見れませんので
メインFormのOpenなどでpublic connectionを作成し保持しましょう。
一時テーブルを使用する場合SQLプロファイラを使用しSessionなどチェックしながら
開発しましょう。
また、余計なトランザクションはかけないようにしましょう。
OUTPUT用のREADなのにトランザクションをかけたため、大変遅くなり
tempdbのLOG領域が1GBでも足りないことがあった。
某F社のHOSTのRDB時代、トランザクションを意図的に書けた場合早かったのでTESTし
たら大変でした。
1万枚以上の印刷などTESTしたためにパンクしました。

-----------------------------------------
  高井 円 Madoka Takai (PB-100)
  E-Mail: who@example.co.jp
  URL: www.trueheart.co.jp (ほとんど工事中)
-----------------------------------------






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


[ウィンドを閉じる]

[MSDE/SQLServer FAQ ]

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

MSDE TOP ページに移動する

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