- 日時: 2007/07/28 14:26
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[チャート][][] * * キーワード:ADO,ADODC,データ連結,Recordset,DataSource, * *********************************************************************************** ----------------------------------------------------------------------------------- 投稿者:花ちゃん ADOを使ってCSVファイルをMSChartコントロールにセットする 2007/07/26 ----------------------------------------------------------------------------------- HDR=NO や HDR=YES としても、国語、数学、英語 のデータが読み込まれなかったり、2行目の データが読み込まれなかったりします。
(下記サイトでも問題になっており、解決していないようです。) http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200405/200405_04050078.html
MSChartコントロール では、最初の行・列のデータが文字列なら項目行として扱うように設定 されているのに対し、ADOでは、1行目を項目行として扱うか、扱わないかの設定になっている のでこのような事がおきます。 逆に、列の方の項目列は上手く読み込まれる事で理解して頂けるかと思います。
そこで、そう言った事を無視して全ての行、列、をデータ行として読み込むようにしてやれば いい訳で、HDR=YES とし(既定でHDR=YESなので省略してもよい)、RS.MoveFirst で最初のレコー ドに移動してから、MSChartコントロール に、Set MSChart1.DataSource = RS としてやれば 全てのデータが、MSChartコントロールにセットされるので、後は、MSChartコントロールが 文字列は、項目として扱ってくれるので上手く表示されるようになります。
当初は、1行目のデータは凡例としてしか使用しないので、別途コードで記入するようにして いたのですが、テストしていた時に偶然回避策が見つかったので、その方法を掲載して置きます。 (コロンブスの卵と同じで理由と対策が解れば何でもない事です。)
---------------------------------------------------------------------------------- デザイン画面は同じものを使って下さい。 参照設定で Microsoft ActiveX Data Objects 2.* Libraryにチェックを入れておいて下さい
Option Explicit Private Sub Form_Load() Form1.Move 0, 0, 10400, 7000 MSChart1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight Dim CN As New ADODB.Connection, RS As New ADODB.Recordset, strSQL As String Dim FolderName As String, DataFile As String FolderName = App.Path 'データのあるフォルダを取得 DataFile = "Test.csv" 'データファイル名を取得
'データベースに接続するための情報を設定する CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & FolderName & ";Extended Properties=""text;HDR=YES;FMT=Delimited;"";" CN.Open 'コネクションをオープン
'Recordsetオブジェクトのオープン strSQL = "Select * From " & DataFile RS.Open strSQL, CN, adOpenStatic, adLockReadOnly, adCmdText '※ 一旦先頭(最初)のレコードに移動(ここがミソ) RS.MoveFirst
Set MSChart1.DataSource = RS 'MSChartにデータを代入 MSChart1.ShowLegend = True '凡例を表示 'Recordset・Connection を閉じる RS.Close CN.Close '参照を解放。 Set RS = Nothing Set CN = Nothing End Sub
------------------------------------------------------------------------------ Excel で作成したCSVファイルの図 http://hanatyan.sakura.ne.jp/samplepic/chartno22-1.gif
上記コードの実行図 http://hanatyan.sakura.ne.jp/samplepic/chartno22-2.gif
|