MSChartの使い方


たんでむ  2004-05-19 22:40:47  No: 113354

MSChartにレコードセットを参照させたいのですが
どのような記述になりますか?
csvファイルの参照等の事例はweb上で
見つけたのですが、レコードセットを参照する場合が
わかりません。
素人な質問で申し訳ありません。


特攻隊長まるるう  2004-05-19 23:28:33  No: 113355

>csvファイルの参照等の事例はweb上で
>見つけたのですが、レコードセットを参照する場合が
>わかりません。
ヘルプにサンプル載ってるからわざわざWebに載っける人がいないだけじゃ?

[Visual Studio 6.0 ドキュメント]
└[Visual Basic ドキュメント]
  └[Visual Basic の使用方法]
    └[コンポーネント ツール ガイド]
      └[ActiveX コントロールの使い方]
        └[ActiveX コントロールの使い方]
          └[チャート (MSChart) コントロールの使い方]
            └[チャート (MSChart) コントロールのデータ連結]

[VB6.0]
Private rsProducts As New ADODB.Recordset
' 省略
   With MSChart1
      .ShowLegend = True
      Set .DataSource = rsProducts
   End With


たんでむ  2004-05-21 11:39:50  No: 113356

ご回答いただき、誠にありがとうございます。

おかげさまで、レコードセットをMSCHARTにSETすることができ、
なんとかそれらしきグラフを表示することに成功しました。

ただ、まだ使えるグラフではなく、不備解消の為、
もう少しお教えいただきたく思います。よろしくお願いいたします。

コード
rs.open mySql,cn 
With MSChart1
    .ShowLegend = True
    .AutoIncrement = True
    Set .DataSource = RS
End With

取得したレコードセットの構造は下記。

  氏名(横軸)    販売数(縦軸)
    a              16  
    b              11
    c               9
    d               5

(問題)
  1)グラフはデフォルトのまま縦棒グラフ表示にしています。
      ただ、3本しか表示されません。
      eを追加し計5名とした場合も、1本足らず棒は4本です。
      なぜ、横軸が1本少なくなるのでしょうか。。。
  
  2)行ラベルを表示させたいのですが、どのようにすればいいのでしょうか?

  3)  各棒にデータラベルを表示させたいのですが、どうすればいいのでしょう  
教えてちゃんで申し訳ありません。
何卒よろしくお願いいたします。


特攻隊長まるるう  2004-05-21 18:45:42  No: 113357

>  1)グラフはデフォルトのまま縦棒グラフ表示にしています。
>      ただ、3本しか表示されません。
>      eを追加し計5名とした場合も、1本足らず棒は4本です。
>      なぜ、横軸が1本少なくなるのでしょうか。。。
>  
>  2)行ラベルを表示させたいのですが、どのようにすればいいのでしょうか?
レコードセットの1行目が行ラベルです。
データベースに行ラベルの項目が無い場合はダミー行でも入れてください。
プログラムからの設定は以下。
[VB6.0]
    With MSChart1
        With .DataGrid
            For i = 1 To .RowCount
                .RowLabel(i, 1) = "行ラベル" & Format(i, "000")
            Next i
            For i = 1 To .ColumnCount
                .ColumnLabel(i, 1) = "列ラベル" & Format(i, "000")
            Next i
        End With
    End With
>  3)  各棒にデータラベルを表示させたいのですが、どうすればいいのでしょう
MSChart は本格的に使った事無いので知りません。
花ちゃんサイトとか参考に調べてみて下さい。
http://www.bcap.co.jp/hanafusa/
http://www.bcap.co.jp/hanafusa/VBHLP/MSChartFLM.htm


特攻隊長まるるう  2004-05-21 18:47:37  No: 113358

あ。
>レコードセットの1行目が行ラベルです。
>データベースに行ラベルの項目が無い場合はダミー行でも入れてください。
レコードセットの1列目が行ラベルです。
データベースに行ラベルの項目が無い場合はダミー列でも入れてください。


特攻隊長まるるう  2004-05-21 19:21:16  No: 113359

あー。追加事項です。どうも1列目から数値型だと自動で行ラベルが
振られて1列目からデータとして表示されるようですね。
あと、途中に Null や 数値型以外の項目が入っても表示がおかしくなるようです。
詳しくは調べてませんが、とりあえず1列目は adVarChar で2列目以降 adInteger
に設定して Null 無しでは正常に動作すると思いますので、表示がおかしい場合は
データを確認してみてください。


たんでむ  2004-05-24 18:23:57  No: 113360

丁寧にご回答いただきありがとうございます。
大変助かります。

ただ、1行目のデータが表示されない件だけが
どうしても解決できません。
レコードセットでは確かに取得できているのに
1行目の値だけがどうしても表示されません。

どうしてなのでしょうか?


特攻隊長まるるう  2004-05-24 19:18:35  No: 113361

>ただ、1行目のデータが表示されない件だけが
>どうしても解決できません。
>レコードセットでは確かに取得できているのに
>1行目の値だけがどうしても表示されません。
>
>どうしてなのでしょうか?
知りません。こちらでは問題なく動作してます。
こちらで考えられる原因はすべて書込みしてあります。
もう一度上から順に書き込みの内容を理解し直して
ください。

2行目以降が表示されているわけですから、何かの
プログラムミスでしょう。MSChart は色々と自動で
設定されてしまうみたいなので、何かが都合が悪い
のかもしれません。レコードセットのデータと MSChart
のプロパティを一つ一つ検証してください。


たんでむ  2004-06-01 02:34:32  No: 113362

今まで色々とプロパティを変更したりして試してみました。
が。。。やっぱり1行目が表示されません。。
バグなのかと思い、サービスパックも3→5まであげたのですが変らず。。

ソースとプロパティの設定は下記のようにになっています。
思い当たるところがもしございましたら、どうぞお教えください。
(ここしか頼るところがありません。)

【ソース】
With MSChart1
   Set .DataSource = rs
   .ShowLegend = True
   .AutoIncrement = True
End With

【プロパティ(行列関係のみ列挙)】
COLUMN 1
COLUMUN COUNT 5
COLUMN LABEL  (空)
COLUMN LABEL COUNT 1
COLUMN LABEL INDEX 0
DATA 41

ROW 1
ROW COUNT 5
ROW LABEL (空)
ROW LABEL COUNT 1
ROW LABEL INDEX 0
SERIES COLUMUN 1


特攻隊長まるるう  2004-06-01 03:32:00  No: 113363

うーん。何が違うんでしょう。これだけでは分かりません。
…というかこれだけの設定でどうすれば1行目を消せるのかが
分からない(^^;)。プロパティはレコードセットを
設定した時点で変わってますから、原因はレコードセットの
データのほうだと思いますが…。ローカルで作ってみたら
どうです?↓コードで1から5までのグラフが3本できません?
ついでにデータの確認用として Adodc と DataGrid も
貼り付けてみて下さい。

[VB6.0]
Private Sub Form_Load()

    With MSChart1
       Set .DataSource = MakeLocalRS
       .ShowLegend = True
       .AutoIncrement = True
    End With

    Set Me.Adodc1.Recordset = MSChart1.DataSource
    Set Me.DataGrid1.DataSource = Me.Adodc1
End Sub

Function MakeLocalRS() As ADODB.Recordset
    Dim wLocalRs As New ADODB.Recordset
    
    With wLocalRs.Fields ' adInteger adVarChar adBSTR
        Call .Append("ID", adInteger, , adFldIsNullable)
        Call .Append("Name", adInteger, , adFldIsNullable)
        Call .Append("Text", adInteger, , adFldIsNullable)
    End With
    
    With wLocalRs
        Call .Open
        For i = 1 To 5
            .AddNew
            .Fields(0) = i
            .Fields(1) = i
            .Fields(2) = i
        Next
    End With

    Set MakeLocalRS = wLocalRs
End Function


たんでむ  2004-06-07 20:17:07  No: 113364

お世話になっております。
ご報告が遅くなりまして申し訳ありません。
ご指示いただいた内容の結果や、その後調査しました内容を
ご報告いたします。

【行った事】
・ローカルでレコードセットのデータを作成、SETしました。
・それらを表示する Adodc と DataGridを追加しました。

【結果】
    グラフは全て表示されました。
    ※1行目が表示されないということははなかった。

で、再度、SQLでDBから取得したデータをSETすると、

  【結果】
    ・ DataGridには全て問題なく表示されています。
    ・しかしグラフにはやはり1行目が表示されません。

いろんな本でも調べてみたのですが、
その中の1冊に興味深い内容が記載されていました。

日経BP  「3週間完全マスター  VisualBasic6.0 データベース編」

  P357   DataSourceプロパティを使ってデータべースからデータをロードすると、
        グラフの1列目が表示されないことがあります。
        vbのチャートコントロールのバグの可能性もあります。    

行と列の違いはありますが、バグの可能性もあるのかな。。とも思います。
でも、みなさんは、SQLで取得したレコードセットでも、
グラフは完全に表示できているのですよね?

ということは、既知の不具合ではない。。。う〜ん。。。


特攻隊長まるるう  2004-06-09 18:14:58  No: 113365

> でも、みなさんは、SQLで取得したレコードセットでも、
みなさん…というかレス付けてるのボクだけですが…(汗)

もともと MSChart に関しての情報が Web 上に少ない感じがします。
使ってる人少ないんでしょうか?。…かくいうオイラもグラフは
丸っきりエクセル使ってて今回の回答はその場で調べたんですが…
検索で引っかかったのは↓
http://www.users.gr.jp/ml/archive/viewer.aspx?name=vb&no=3568
くらいでした。
それほど有効なレスは付いていませんでした。

> vbのチャートコントロールのバグの可能性もあります。    
みたいな記述は見つけられませんでした。

上記リンク先のメッセージボックス表示で解決するなら…なんらかの
方法でどうにかなる可能性も…無きにしも非ず。…ただ、調べても
労力が割に合わない気もします。データベースからロードした
レコードセットがまずいのならローカルで用意したレコードセットに
入れ替えるとか…ってまぁ、不恰好ですが問題なく動かすためには
しょうがないですね。もう少し調べるなら…環境の問題なのか
何かの設定の問題なのか…今もしばらく試したんですが…うーん
普通に表示されてしまいますねぇ。こちらでは調べようが無いです。
他の方の情報を求めるなら…花ちゃんサイトででも聞いてみたら
どうかと…(MSChart の話題がたまに出てますので…)
環境(OSとVBとMSChartのバージョン、データベースの種類なんかも
書いてみるとよいかも?)


岡田 之仁  2004-06-09 19:07:41  No: 113366

MSChart から外れますが・・・

マイクロソフトも、Office Web コンポーネント(OWC)に
路線を変更しているように思います。
OWCなら、MSChartより多くの情報やサンプルがマイクロソ
フトにはありました。

ライセンスの問題はありますが、もしかしたらいいかも
しれません。

情報と言うことで・・・

以上。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加