MSChartにレコードセットを参照させたいのですが
どのような記述になりますか?
csvファイルの参照等の事例はweb上で
見つけたのですが、レコードセットを参照する場合が
わかりません。
素人な質問で申し訳ありません。
>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
ご回答いただき、誠にありがとうございます。
おかげさまで、レコードセットを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) 各棒にデータラベルを表示させたいのですが、どうすればいいのでしょう
教えてちゃんで申し訳ありません。
何卒よろしくお願いいたします。
> 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
あ。
>レコードセットの1行目が行ラベルです。
>データベースに行ラベルの項目が無い場合はダミー行でも入れてください。
レコードセットの1列目が行ラベルです。
データベースに行ラベルの項目が無い場合はダミー列でも入れてください。
あー。追加事項です。どうも1列目から数値型だと自動で行ラベルが
振られて1列目からデータとして表示されるようですね。
あと、途中に Null や 数値型以外の項目が入っても表示がおかしくなるようです。
詳しくは調べてませんが、とりあえず1列目は adVarChar で2列目以降 adInteger
に設定して Null 無しでは正常に動作すると思いますので、表示がおかしい場合は
データを確認してみてください。
丁寧にご回答いただきありがとうございます。
大変助かります。
ただ、1行目のデータが表示されない件だけが
どうしても解決できません。
レコードセットでは確かに取得できているのに
1行目の値だけがどうしても表示されません。
どうしてなのでしょうか?
>ただ、1行目のデータが表示されない件だけが
>どうしても解決できません。
>レコードセットでは確かに取得できているのに
>1行目の値だけがどうしても表示されません。
>
>どうしてなのでしょうか?
知りません。こちらでは問題なく動作してます。
こちらで考えられる原因はすべて書込みしてあります。
もう一度上から順に書き込みの内容を理解し直して
ください。
2行目以降が表示されているわけですから、何かの
プログラムミスでしょう。MSChart は色々と自動で
設定されてしまうみたいなので、何かが都合が悪い
のかもしれません。レコードセットのデータと MSChart
のプロパティを一つ一つ検証してください。
今まで色々とプロパティを変更したりして試してみました。
が。。。やっぱり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
うーん。何が違うんでしょう。これだけでは分かりません。
…というかこれだけの設定でどうすれば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
お世話になっております。
ご報告が遅くなりまして申し訳ありません。
ご指示いただいた内容の結果や、その後調査しました内容を
ご報告いたします。
【行った事】
・ローカルでレコードセットのデータを作成、SETしました。
・それらを表示する Adodc と DataGridを追加しました。
【結果】
グラフは全て表示されました。
※1行目が表示されないということははなかった。
で、再度、SQLでDBから取得したデータをSETすると、
【結果】
・ DataGridには全て問題なく表示されています。
・しかしグラフにはやはり1行目が表示されません。
いろんな本でも調べてみたのですが、
その中の1冊に興味深い内容が記載されていました。
日経BP 「3週間完全マスター VisualBasic6.0 データベース編」
P357 DataSourceプロパティを使ってデータべースからデータをロードすると、
グラフの1列目が表示されないことがあります。
vbのチャートコントロールのバグの可能性もあります。
行と列の違いはありますが、バグの可能性もあるのかな。。とも思います。
でも、みなさんは、SQLで取得したレコードセットでも、
グラフは完全に表示できているのですよね?
ということは、既知の不具合ではない。。。う〜ん。。。
> でも、みなさんは、SQLで取得したレコードセットでも、
みなさん…というかレス付けてるのボクだけですが…(汗)
もともと MSChart に関しての情報が Web 上に少ない感じがします。
使ってる人少ないんでしょうか?。…かくいうオイラもグラフは
丸っきりエクセル使ってて今回の回答はその場で調べたんですが…
検索で引っかかったのは↓
http://www.users.gr.jp/ml/archive/viewer.aspx?name=vb&no=3568
くらいでした。
それほど有効なレスは付いていませんでした。
> vbのチャートコントロールのバグの可能性もあります。
みたいな記述は見つけられませんでした。
上記リンク先のメッセージボックス表示で解決するなら…なんらかの
方法でどうにかなる可能性も…無きにしも非ず。…ただ、調べても
労力が割に合わない気もします。データベースからロードした
レコードセットがまずいのならローカルで用意したレコードセットに
入れ替えるとか…ってまぁ、不恰好ですが問題なく動かすためには
しょうがないですね。もう少し調べるなら…環境の問題なのか
何かの設定の問題なのか…今もしばらく試したんですが…うーん
普通に表示されてしまいますねぇ。こちらでは調べようが無いです。
他の方の情報を求めるなら…花ちゃんサイトででも聞いてみたら
どうかと…(MSChart の話題がたまに出てますので…)
環境(OSとVBとMSChartのバージョン、データベースの種類なんかも
書いてみるとよいかも?)
MSChart から外れますが・・・
マイクロソフトも、Office Web コンポーネント(OWC)に
路線を変更しているように思います。
OWCなら、MSChartより多くの情報やサンプルがマイクロソ
フトにはありました。
ライセンスの問題はありますが、もしかしたらいいかも
しれません。
情報と言うことで・・・
以上。