OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ActiveReportについて

  • 困ってます
  • 質問No.105004
  • 閲覧数6098
  • ありがとう数5
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 64% (41/64)

ActiveReportの詳細セクション(Detail)以外の、例えばGroupFooterなどで、1ページに表示するデータ(行)数が足りなかった場合に空白行を出力することなどできますか?
(例えば1ページに18行のデータを表示するとして、データが5件の場合、合計(GroupFooter)で18行に満たない分、空白を表示させる)
説明がうまくできなくて申し訳ないのですが、よろしくお願い致します。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.6
レベル9

ベストアンサー率 63% (28/44)

お疲れ様です。

あまりお役に立てず申し訳ありません。自分にも勉強になります。

>あと、詳細情報の件数で改ページするというのはできますか?

Detail_Formatで現在の行数を判断して

If 現在の行数 = 最大行数 Then
Me.Detail.NewPage = ddNPAfter'// このあと改ページ
Else
Me.Detail.NewPage = ddNPNone    '// 改ページしない
End If

で良いと思います。

>グループ条件が変わったかどうかという情報は、このようにしないととれないでしょうかね?

自分はまだまだ勉強不足なのでこのような取得方法しか思いつきませんでした。
お役に立てずすいません。

Detail_Formatを少し変えてみました。
RS.MovePreviousを使わない方法です。お試しください。

Private Sub Detail_Format()

  Dim RS As New ADODB.Recordset

  Set RS = DataControl1.Recordset.Clone

  '// データ出力の判断
  If BoolEMPTY Then
    '// 空行
    Field1.Text = ""
  Else
    '// データ行
    Field1.Text = RS!グループ条件
  End If
  
  '// 次のデータへ移動
  RS.MoveNext
  
  If Not RS.EOF Then
    '// 次のデータとグループ条件を比較
    If DataControl1.Recordset!グループ条件 <> RS!グループ条件 Then
      '// 次のデータでグループ条件が変わる
      If IntROW >= 最大データ行数 Then
        '// 空の行数を満たした
        Me.LayoutAction = 1 + 2 + 4
        BoolEMPTY = False
      Else
        '// まだ空行を印字する
        Me.LayoutAction = 1 + 2
        BoolEMPTY = True
      End If
    Else
      '// 次のデータもグループ条件が等しい
      Me.LayoutAction = 1 + 2 + 4
      BoolEMPTY = False
    End If
  Else
    '// これ以上データがない
    If IntROW >= 最大データ行数 Then
      '// 空の行数を満たした
      Me.LayoutAction = 1 + 2 + 4
      BoolEMPTY = False
    Else
      '// まだ空行を印字する
      Me.LayoutAction = 1 + 2
      BoolEMPTY = True
    End If
  End If
  
  '// 行数カウントアップ
  IntROW = IntROW + 1

  RS.Close

End Function

間違っていたらごめんなさい。
お礼コメント
marmi1516

お礼率 64% (41/64)

何度もご親切にありがとうございました。
やはり、RS.MovePreviousを使わない方法でもできませんでした。
というより、上司がADOと言っていたのですが、どうも私が思うに違うようなきがします。
OLE(?)とか書いてあるんですよ。だから違うんじゃないかと・・・。
(ActiveReportに詳しい人がうちの会社にはいないもので・・・)
結局、夜中までやってもわからなかったので、課長が来た時に相談したところ、
別の方法でやり方はあるらしいのですが、ちょっと面倒なやり方らしいです。
リリースも23日に迫っていて忙しいので、ブレイクのみで空白行はとりあえずは保留になりました。
でも、josyo_mさんが教えてくださったことが、他の帳票作成にかなり役立ちました。
何度も教えていただいたのに、このような結果になってしまってすみませんでした。
また何かあったときはよろしくお願いします。
本当にありがとうございました。
投稿日時 - 2001-07-21 01:17:58
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル9

ベストアンサー率 63% (28/44)

回答ではないのですが、 (例えば1ページに18行のデータを表示するとして、データが5件の場合、合計(GroupFooter)で18行に満たない分、空白を表示させる) とは、5件のデータを印字して残りの13行分の空白行を印字して合計(GroupFooter)を印字したいということですか?もしそうでしたらLayoutActionプロパティを使ってDetailで空白行数を出力してはどうでしょうか。 ...続きを読む
回答ではないのですが、

(例えば1ページに18行のデータを表示するとして、データが5件の場合、合計(GroupFooter)で18行に満たない分、空白を表示させる)

とは、5件のデータを印字して残りの13行分の空白行を印字して合計(GroupFooter)を印字したいということですか?もしそうでしたらLayoutActionプロパティを使ってDetailで空白行数を出力してはどうでしょうか。

あまりイメージがつかめなくてすいません。
間違っていたらごめんなさい。
補足コメント
marmi1516

お礼率 64% (41/64)

その通りです。
今日ヘルプをみていて、LayoutActionをみつけたのですが、
使い方がよくわかりません。
ただ、わたしがここでやりたい「空白」というのは、
データの空白なので枠は表示させたいのです。
LayoutActionは、空白というだけあって何も表示されませんよね?
ちょっとその辺がまだよくわからないんです・・・。
投稿日時 - 2001-07-18 12:45:04


  • 回答No.2
レベル9

ベストアンサー率 63% (28/44)

お疲れ様です。 >LayoutActionは、空白というだけあって何も表示されませんよね? Detailに枠線がかかれていれば印字されると思いますけど。 次のデータでグループ条件が変わり、合計(GroupFooter)が印字されるとわかるのでしたら、 Detail_Formatで Me.LayoutAction = 1 + 2 と設定して、必要な行数を空印字(Detai ...続きを読む
お疲れ様です。

>LayoutActionは、空白というだけあって何も表示されませんよね?

Detailに枠線がかかれていれば印字されると思いますけど。

次のデータでグループ条件が変わり、合計(GroupFooter)が印字されるとわかるのでしたら、

Detail_Formatで

Me.LayoutAction = 1 + 2

と設定して、必要な行数を空印字(Detail_Formatを必要な回数回る)してから

Me.LayoutAction = 1 + 2 + 4

に戻すといいのではないでしょうか。現在何行目まで印字しているかをカウントしていないとだめですけど。

LayoutActionプロパティで指定している値は

1 = セクションを出力する
2 = レイアウトを移動する
4 = 次のレコードへ移動する

です。

間違っていたらごめんなさい。
補足コメント
marmi1516

お礼率 64% (41/64)

たびたびすみません。
いままで、改ページの設定をNewpageというのでやってたのですが(他にわからなかったので)、
このLayoutActionを使用する場合、この改ページの仕方では駄目ですか?
何か他に改ページの仕方をご存知でしたら教えて下さい。

教えていただいたLayoutActionについては、まだ上手くできていませんが、
もうすこし頑張ってみます。
どうしても上手くいかなかった場合は、またお伺いするかもしれませんが・・・
投稿日時 - 2001-07-18 14:46:29
  • 回答No.3
レベル9

ベストアンサー率 63% (28/44)

お疲れ様です。 ちょっと作ってみました。 Option Explicit Private IntROW   As Integer   '// 現在の行数 Private BoolEMPTY As Boolean   '// 空行判断 Private Sub ActiveReport_ReportStart()      '// 接続処理 ...続きを読む
お疲れ様です。

ちょっと作ってみました。

Option Explicit

Private IntROW   As Integer   '// 現在の行数
Private BoolEMPTY As Boolean   '// 空行判断

Private Sub ActiveReport_ReportStart()
  
  '// 接続処理 略
  
  '// GroupHeader
  GroupHeader1.DataSource = "DAODataControl1"
  GroupHeader1.DataField = グループ条件
  GroupHeader1.NewPage = ddNPAfter
  
End Sub

Private Sub GroupHeader1_Format()
  
  '// 行数初期化
  IntROW = 1
  BoolEMPTY = False
  
End Sub

Private Sub Detail_Format()
  
  Dim RS As DAO.Recordset
  
  Set RS = DAODataControl1.Recordset
  
  '// データ出力の判断
  If BoolEMPTY Then
    
    '// 空行
    Field1.Text = ""
  
  Else
    
    '// データ行
    Field1.Text = RS!グループ条件
    
  End If
  
  '// 次のデータへ移動
  RS.MoveNext
  
  If Not RS.EOF Then
    
    '// 次のデータとグループ条件を比較
    If Field1.Text <> RS!グループ条件 Then
      
      '// 次のデータでグループ条件が変わる
      If IntROW >= 最大データ行数 Then
        
        '// 空の行数を満たした
        Me.LayoutAction = 1 + 2 + 4
        BoolEMPTY = False
        
      Else
        
        '// まだ空行を印字する
        Me.LayoutAction = 1 + 2
        BoolEMPTY = True
        
      End If
      
    Else
      
      '// 次のデータもグループ条件が等しい
      Me.LayoutAction = 1 + 2 + 4
      BoolEMPTY = False
      
    End If
    
  Else
    
    '// これ以上データがない
    If IntROW >= 最大データ行数 Then
      
      '// 空の行数を満たした
      Me.LayoutAction = 1 + 2 + 4
      BoolEMPTY = False
      
    Else
      
      '// まだ空行を印字する
      Me.LayoutAction = 1 + 2
      BoolEMPTY = True
      
    End If
    
  End If
  
  '// データ位置を戻す
  RS.MovePrevious
  
  '// 行数カウントアップ
  IntROW = IntROW + 1
  
End Sub

Detailに枠が書かれていることが前提です。

>このLayoutActionを使用する場合、この改ページの仕方では駄目ですか?

LayoutActionを使用していてもNewPageには関係ないと思いますが。

>何か他に改ページの仕方をご存知でしたら教えて下さい。

自分もNewPageプロパティしか改ページとして使えるものは知りません。NewPageプロパティをどのセクションに設定するかによっても動きが違うと思います。

間違っていたらごめんなさい。
補足コメント
marmi1516

お礼率 64% (41/64)

RS.MovePrevious が使えませんでした。
エラーになってしまいました。
RS.MovePreviousが使えない場合、他には方法はないのでしょうか?
本当に何度もすみません・・・
投稿日時 - 2001-07-18 17:02:20
  • 回答No.4
レベル9

ベストアンサー率 63% (28/44)

お疲れ様です。 どのようなエラーでしょうか? MoveNextはエラーにならなかったのでしょうか? 前方カーソル?? また、DataControl1はどのタイプを使用していますか?ADO,RDO,DAO?? ちなみに例であげたのはDAOです。 接続のところでは、 DAODataControl1.DefaultType = ddDAOUseJet と、指定してあります ...続きを読む
お疲れ様です。

どのようなエラーでしょうか?
MoveNextはエラーにならなかったのでしょうか?
前方カーソル??

また、DataControl1はどのタイプを使用していますか?ADO,RDO,DAO??

ちなみに例であげたのはDAOです。

接続のところでは、

DAODataControl1.DefaultType = ddDAOUseJet

と、指定してあります。なにか関係あるかな?

例は、あくまでも例なのでこだわらずに、とりあえず次のデータとグループ条件が比較できればよいと思います。

間違っていたらごめんなさい。
  • 回答No.5
レベル9

ベストアンサー率 63% (28/44)

お疲れ様です。 たびたびすいません。 もしADOでしたら ActiveReport_ReportStart で With DataControl1   .Source = SQL   '// SQL文   '// ↓↓↓↓↓↓↓↓↓   .Recordset.Close   .Recordset.CursorType = adOpenStatic   .Re ...続きを読む
お疲れ様です。
たびたびすいません。

もしADOでしたら ActiveReport_ReportStart で

With DataControl1
  .Source = SQL   '// SQL文

  '// ↓↓↓↓↓↓↓↓↓
  .Recordset.Close
  .Recordset.CursorType = adOpenStatic
  .Recordset.Open
  '// ↑↑↑↑↑↑↑↑↑
End With

と指定してみてはどうでしょうか。

間違っていたらごめんなさい。
補足コメント
marmi1516

お礼率 64% (41/64)

やはり、上のようにしても駄目でした。(ちなみにADOでした)
グループ条件が変わったかどうかという情報は、このようにしないととれないでしょうかね?
昨日も終電ちかくまで頑張ったのですが、やはり上手く情報が取れませんでした。
あと、詳細情報の件数で改ページするというのはできますか?
投稿日時 - 2001-07-19 08:56:54
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ