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 技術サポート情報一覧]
|