dポイントプレゼントキャンペーン実施中!

SQL SerVer 2005 + Access(adp) にてDBを作成しています。
あるレポートのサブレポートに一時テーブルの値を使用したいのですが、
表示されません。

作成したSQLは下記で、EXECでは表示されます。
Access側のクエリを開こうとすると、
「ストアドプロシージャは実行されましたが、レコードは返されませんでした」
という結果が返ってきます。
SQL側の一時テーブルをAccessのレポートのソースにするにはどうしたらいいのでしょうか?
教えてください。

注:ダイレクトにサブレポートを作成すると、メインレポートとリンクしません。
  新規にテーブルを作成したものは、メインレポートとサブレポートがリンクします。
  しかしあるレポートのためだけに、二重にテーブルを作成したくありません。
  一時テーブルで済ませられるのなら、そうしたいと思います。
  よろしくお願いします。

----------------------------------------------
--伝票分の業者請求書 レポートに表示する
----------------------------------------------
ALTER procedure [dbo].[S_業者請求伝票分R] @myid int
as

begin
---一時テーブルの作成
   create table #業者請求
     (kr発注物件ID int, kr発注ID int, kr業者請求日 datetime, kr業者請求額 money, kr最終支払 smallint,
     kr請求メモ nvarchar(7),kr会社名 nvarchar(30),kr特記 nvarchar(20),kr受注登録ID int)
---一時テーブルに値を代入
   insert into #業者請求(kr発注物件ID, kr発注ID, kr業者請求日, kr業者請求額, kr最終支払,
      kr請求メモ,kr会社名,kr特記,kr受注登録ID)
   SELECThh.発注物件ID, ga.発注ID, ga.業者請求日, ga.業者請求額, ga.最終支払,
      ga.請求メモ,zz.会社名,hh.特記,hh.受注登録ID
   FROM dbo.T_業者請求 AS ga left outer JOIN
       dbo.T_発注 AS hh ON ga.発注ID = hh.発注ID INNER JOIN
        dbo.T_住所 AS zz ON hh.会社ID = zz.会社ID
   wherehh.受注登録ID=@myid
end

begin
    select*from#業者請求
end

A 回答 (2件)

adpのソースにストアドが使えるかどうかは確認していませんが、Jetの場合、ストアドの先頭には「SET NOCOUNT ON」を切らないと、レコードより先にメッセージが返されて結果行がゼロになります。



ALTER procedure [dbo].[S_業者請求伝票分R] @myid int
as
begin
の直後に「SET NOCOUNT ON」を足してみてください。

  #もしこれで解決するなら、そもそも一時テーブル作る必要ないかもしれませんけど
    • good
    • 0
この回答へのお礼

ひぇ~! できました!!

私はてっきりAccess側でSQLの呼び出しとか何とかが必要だと思っていました。
jamshid6さん ありがとうございます。

追加質問で、
この「SET NOCOUNT ON」に対応する「OFF」は必要ないのでしょうか?

お礼日時:2008/08/06 17:27

SET NOCOUNT OFFは不要です。


ストアドプロシージャ内で切ると、その中でだけ有効です。

ついでですが、ストアドが中で一度終わっている理由はなんでしょう?
中のend/beginは必要ないように見えます。
更にいうと、一時テーブルを作成せず、select文だけ書いても同じ結果になるような気がします。
(つまり、この部分だけ)
ALTER procedure [dbo].[S_業者請求伝票分R] @myid int
as
begin
   set nocount on
   SELECT hh.発注物件ID, ga.発注ID, ga.業者請求日, ga.業者請求額, ga.最終支払,
      ga.請求メモ,zz.会社名,hh.特記,hh.受注登録ID
   FROM dbo.T_業者請求 AS ga left outer JOIN
       dbo.T_発注 AS hh ON ga.発注ID = hh.発注ID INNER JOIN
        dbo.T_住所 AS zz ON hh.会社ID = zz.会社ID
   where hh.受注登録ID=@myid
end

この回答への補足

上記を実行した所、レポートの表示はされますが、サブレポートとしてメインレポートにリンクされません。
メインレポートの数、サブレポートのすべてが表示されてしまいます。
これは「SET NOCOUNT ON」がない状態と同じです。

又、一時テーブルを使用したSQL文でも同じ結果でした。
新規にテーブルを作成した内容については、メインレポートとリンクするので、一時テーブルでもOKかと思ったのですが・・・
専用のテーブルを用意し、UPDATEでその都度入力させることにします。

しかし「今回は一時テーブルをAccess側に表示させる」という質問ですので、それについては解決しましたので終了と致します。
amshid6さん、本当に有難うございました。
(Where文に省略がありました。
  (where hh.受注登録ID=@myid) and (hh.発注物件ID>600000) )

補足日時:2008/08/07 10:56
    • good
    • 0
この回答へのお礼

>SET NOCOUNT OFFは不要
了解です。

そうですね。もしかしたら、Select文だけでできるかもしれません。
SET NOCOUNT on なしでは何度やってもうまくいかず、
これはリンクキーの問題だと思っていました。
(メインレポートにリンクするサブレポートのキーに、メインキーにはない
 キーが入っているため)
 
明日テストして報告します。
重ね重ねありがとうございます。

お礼日時:2008/08/06 18:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す