[リストへもどる]
一括表示

投稿時間:2004/07/15(Thu) 15:57
投稿者名:C_Jr
URL :
タイトル:
MSFlexGrid
初めまして
いつも、VB6.0で困ったことがあると
活用させてもらっている卵PGのC_Jrです
本当に豊富で質が高いコンテンツありがとうございます(礼)

今回、MSFlexGridで質問させていただきます。
MSFlexGridで項目を段組にしたりできるんでしょうか?
まだまだ卵PGですが、宜しければご解答お願いします

以下(こんな感じに表示したい・・・)

'項目
------------------------------------------
 国語  英語  理科  社会  数学
------------------------------------------
 総得点           名前
------------------------------------------(ここまで項目部、以下生データ
 80       60     50      50      80
  320                       鈴木一郎
  .
  .
  .
  .
  .
  .
  .
------------------------------------------

投稿時間:2004/07/15(Thu) 19:01
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: MSFlexGrid
とりあえず、MergeRow  MergeCol  MergeCells をヘルプで調べて見て下さい。
使用例も載っているかと思います。
又、MSFlexGrid 関係のところの過去のログにもあったかと。

投稿時間:2004/07/21(Wed) 18:59
投稿者名:C_Jr
URL :
タイトル:
Re^2: MSFlexGrid
返信が遅れて申し訳ありません。
別の案件で、ここ最近、ネットにすら接続するのが困難な状況で
本当にごめんなさい。

返信ありがとうございます.
Helpを見て、何とか表示することができました。

今度は違う相談なんですが・・・スレッドを立てるのは非常に悪い気がするので
ここで、聞きます。質問は、グレープシティのSPREAD6.0Jを使って、今回のMSFlexGridと同じようなものを
作成する際に、DBからデータを取得して、それをSPREADに表示させるとき

約18800件のデータ(一件あたり5セル必要。)をとりあえず、セルを結合せずに、二段を一行としているものを一行ずつ表示させるのに約47秒かかってしまいます…これをもっと早く表示させたいのですが、速く表示される方法をご存知でしょうか?

私が試した方法は
@SetTextを使って指定する
A最初に描画を止めて、データを埋め込み終えてから描画する
BSPREADのENABLEDをFalseにして、データを埋め込み終わってから、Trueに戻す

投稿時間:2004/07/21(Wed) 19:15
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: MSFlexGrid
現在、どのようにして表示されているのか解りませんが。
グレープシティのSPREAD6.0J は使った事もありませんので未確認ですが、ADO やDAO 等は使用
できないのでしょうか?
MSHFlexGrid で4万セルの入力で 0.8 秒でした。


# NET では丸付き文字は機種依存文字としてご法度になっています。
  文字化け等をおこしますので使用しない方がいいでしょう。

投稿時間:2004/07/21(Wed) 19:42
投稿者名:C_Jr
URL :
タイトル:
Re^4: MSFlexGrid
即レス感謝です。

接続は手動でDB(MSSQLサーバ)にADOで接続して
レコードセットを取得しています。

表示は以下のとおりです

'項目
------------------------------------------
 国語  英語  理科  社会  数学
 80       60     50      50      80
  .
  .
  .
  .
  .
  .
  .
------------------------------------------

PG上ではMSFlexGridで早めに表示するときに使う
.TextMatrix(i, j) = n  と同じようなメソッドを使っています
(SPREADでは、.SetText 列番,行版,入力文字)。

このメソッドを用いて
指定した列版に、rs!国語 といった感じでデータを埋め込んでいってます。。。

投稿時間:2004/07/21(Wed) 19:43
投稿者名:C_Jr
URL :
タイトル:
Re^5: MSFlexGrid
/**

後、機種依存文字の方ではわかりました。
本当に申し訳ないです。。使ってはいけないことを、すっかり忘れてました

**/

投稿時間:2004/07/21(Wed) 20:11
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: MSFlexGrid
> 接続は手動でDB(MSSQLサーバ)にADOで接続して
> レコードセットを取得しています。

そのレコードセットをSPREADにそのまま連結できないのですか?
ここのADOを使ってCSVファイルをMSHFlexGridに表示するのように
Set MSHFlexGrid1.DataSource = RS のように一発で。

私は、DBについては詳しくないので、現在使用しているコードを投稿して
下されば、他の方からも回答が得られやすいしどのように表示設定されて
いるのか何度も確認しなくても済むと思うのですが。
現在どのような表示のプログラムを実行しているのかが解らないと、それを
改善するのはこのように文書やり取りするには限界があるかと。

投稿時間:2004/07/21(Wed) 22:58
投稿者名:VFR
Eメール:
URL :
タイトル:
Re^5: MSFlexGrid
> (SPREADでは、.SetText 列番,行版,入力文字)。

SetTextの替わりにClipを使ってみては?

投稿時間:2004/07/21(Wed) 23:44
投稿者名:
Eメール:
URL :
タイトル:
Re^6: MSFlexGrid
仮想モードを使えば、速くなります

投稿時間:2004/07/22(Thu) 08:55
投稿者名:VFR
Eメール:
URL :
タイトル:
Re^6: MSFlexGrid
> > (SPREADでは、.SetText 列番,行版,入力文字)。
>
> SetTextの替わりにClipを使ってみては?

レコードセットを直接渡すのであれば
Far Spread 6.0(OLEDB)を追加し下記のコードを
コネクション作成後に記述し試して下さい。

    Recset.Open "select * from ????", ado_Con, adOpenStatic, adLockReadOnly
    
    Set fpSpread1.DataSource = Recset

投稿時間:2004/07/22(Thu) 11:54
投稿者名:C_Jr
URL :
タイトル:
Re^7: MSFlexGrid
//*以下、ソースです*//
//*コネクションやレコードセット取得は、申し訳ないのですが公開できません・・・誠に申し訳ないです*//

Private Sub CmdKensaku_Click()

'宣言部
    Dim I_Judge As Integer              '割り切った値を判定
    Dim L_CellCounter As Long           'セルのカウンタ
    Dim I_DBJudge As Integer
    Dim I_RSCOUNT As Integer
    
'DBに接続
    Dim Rs As New ADODB.Recordset
    Dim S_SQL As String
            
'初期化
    I_RSCOUNT = 0
    L_CellCounter = 0
    I_DBJudge = 0
    I_Judge = 0
    S_SQL = ""
    
'設定
    'DBへの接続
    I_DBJudge = (DBに接続する)
    
    'SQLをセット
    S_SQL = "SELECT IsNull(国語,0) as 国語,"
    S_SQL = S_SQL & "IsNull(算数,0) as 算数,"
    S_SQL = S_SQL & "IsNull(理科,0) as 理科,"
    S_SQL = S_SQL & "IsNull(社会,0) as 社会,"
    S_SQL = S_SQL & "IsNull(英語,0) as 英語,"
    S_SQL = S_SQL & "IsNull(物理,0) as 物理"

    S_SQL = S_SQL & "From "
    S_SQL = S_SQL & "科目表 "
    
    'レコードセット取得
    If I_DBJudge = 0 Then
        I_DBJudge = (レコードセットを取得する処理)
    End If
    
    Me.fpSpread1.Redraw = False                 '描画OFF
    Me.fpSpread1.Visible = False
    
    Me.fpSpread1.DataSource = Rs
    Rs.MoveFirst
    
    I_RSCOUNT = Rs.RecordCount
    fpSpread1.ClearRange 1, 1, I_RSCOUNT * 2, 5, False
    Me.fpSpread1.MaxRows = I_RSCOUNT * 2          '最大行数をレコードセットの桁数にセット

'実処理



    If Rs.EOF <> True Then
        With Me.fpSpread1
            .Col2 = 5
            .Row2 = .MaxRows
        End With
    
        Do Until Rs.EOF = True
            L_CellCounter = L_CellCounter + 1
            With Me.fpSpread1
                .Col = 1
                .Row = L_CellCounter
                .AddCellSpan 2, L_CellCounter, 2, 1
                .AddCellSpan 0, L_CellCounter, 2, 2            '結合


                .Clip = Rs!国語 & vbTab & _
                        Rs!算数 & vbTab & vbTab & _
                        Rs!理科 & vbTab & _
                        Rs!社会
            End With
            
            L_CellCounter = L_CellCounter + 1
            
            With Me.fpSpread1
                .Col = 1
                .Row = L_CellCounter
                .AddCellSpan 1, L_CellCounter, 2, 1
                .AddCellSpan 3, L_CellCounter, 3, 1
                .AddCellSpan 0, L_CellCounter, 2, 2            '結合
                

                .Clip = Rs!英語 & vbTab & vbTab & _
                        Rs!物理
            End With
            Rs.MoveNext
        Loop
    End If
    
    Me.fpSpread1.Visible = True
    Me.fpSpread1.Redraw = True                          '描画ON
    
    '終了処理
    Rs.Close
    Set Rs = Nothing
End Sub

投稿時間:2004/07/22(Thu) 11:59
投稿者名:C_Jr
URL :
タイトル:
Re^8: MSFlexGrid
皆さん、レスありがとうございます。
皆さんの意見をいろいろと取り入れてみてソースを修正した物を投稿致します。。

これで約1880件ぐらいを約10秒で取得できるようになりました。
全件取得(一万八千件以上)は、無理かと思い、諦めたのですが・・・
現状でさらに改善できるところはありますでしょうか?

後、仮想モードに関して
仮想モードをONにした状態でスクロールすると、メモリ上から読み出しているのか
非常にスクロールが遅くなるので・・・無理でした。ごめんなさい、、、

それと
最初に検索したときは、約10秒で検索して表示できるのですが
次に再度検索後、表示させようと思うと、何故か、約25秒かかってしまいます。。。
どうしてわかる方、いらっしゃいますか?

投稿時間:2004/07/22(Thu) 12:41
投稿者名:VFR
Eメール:
URL :
タイトル:
Re^8: MSFlexGrid
>     Me.fpSpread1.DataSource = Rs
>     Rs.MoveFirst
>    
>     I_RSCOUNT = Rs.RecordCount
>     fpSpread1.ClearRange 1, 1, I_RSCOUNT * 2, 5, False
>     Me.fpSpread1.MaxRows = I_RSCOUNT * 2          '最大行数をレコードセットの桁数にセット

DataSourceを指定することにより一旦Spreadにはレコードセットで
取得してた内容が反映されます。

1明細行あたり2行の表示なのでこの行は不要かと思います。
あとMaxRowに0をセットし後に再度MaxRowに表示最大行数をセットすると
セルに対しての設定がすべてクリアされますので
ClearRangeは不要かと思います。

    Me.fpSpread1.MaxRows = 0                      '最大行数をクリア
    Me.fpSpread1.MaxRows = I_RSCOUNT * 2          '最大行数をレコードセットの桁数にセット

'実処理
    If Rs.EOF <> True Then
        With Me.fpSpread1
            .Col2 = 5: .Row2 = .MaxRows
        End With
    
        Do Until Rs.EOF = True
            L_CellCounter = L_CellCounter + 1
            With Me.fpSpread1
                .Col = 1: .Row = L_CellCounter
                .AddCellSpan 2, L_CellCounter, 2, 1
                .AddCellSpan 0, L_CellCounter, 2, 2            '結合
                .Clip = Rs!国語 & vbTab & Rs!算数 & vbTab & vbTab & _
                        Rs!理科 & vbTab & Rs!社会
            End With
            
            L_CellCounter = L_CellCounter + 1
            
            With Me.fpSpread1
                .Col = 1
                .Row = L_CellCounter
                .AddCellSpan 1, L_CellCounter, 2, 1
                .AddCellSpan 3, L_CellCounter, 3, 1
                .AddCellSpan 0, L_CellCounter, 2, 2            '結合
                .Clip = Rs!英語 & vbTab & vbTab & Rs!物理
            End With
            Rs.MoveNext
        Loop
    End If

投稿時間:2004/07/22(Thu) 13:59
投稿者名:C_Jr
URL :
タイトル:
Re^9: MSFlexGrid
VFR様、即レス感謝です。
投稿した後、一時間ぐらい、一人で悩んでおりまして
VFR様のおかげで、再検索時も約10秒でいけました。

本当にありがとうございます!(礼)