VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2002/11/06(Wed) 23:02
投稿者魔界の仮面弁士
Eメール
URL
タイトルADOを使うなら

ADOを使って、そのCSVファイルをデータベースのように扱うこともできます。


=================================
Option Explicit

Private Sub Command1_Click()
    'これは、実験用のcsvファイルを作成するだけです。

    Dim FNo As Integer
    Dim Dt As String
    Dim I As Long
    
    Randomize
    FNo = FreeFile()
    Open "C:\USER\TEST.CSV" For Output As #FNo
    
    Write #FNo, "日付", "値"
    For I = 1 To 5000
        Dt = Format(DateSerial(2002, 1, I), "yyyy-mm-dd")
        Write #FNo, Dt, Int(Rnd() * 1000)
    Next
    
    Close #FNo
End Sub

Private Sub Command2_Click()
    'こちらが実際の処理。データシェイプを利用して算出する例です。
    Dim Cn      As ADODB.Connection
    Dim rsCSV   As ADODB.Recordset
    Dim rsCalc  As ADODB.Recordset
    Dim SQL     As String

    Set Cn = New ADODB.Connection
    Cn.Provider = "MSDataShape"
    Cn.Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"
    Cn.Open "Data Source=C:\USER\;" _
          & "Extended Properties=""text;HDR=YES;FMT=Delimited"""

    '日付の降順に並べて、そのうちの上位5件を取得します。
    SQL = "SELECT TOP 5" _
        & "   日付, 値" _
        & " FROM `TEST.CSV`" _
        & " ORDER BY 日付 DESC"
    Set rsCSV = New ADODB.Recordset
    rsCSV.Open "SHAPE {" & SQL & "} AS rsCSV", Cn

    '別途作成した、rsCSVというRecordsetをリシェイプします。
    SQL = "SHAPE rsCSV COMPUTE" _
        & "  rsCSV," _
        & "  AVG(rsCSV.値) AS 平均," _
        & "  MAX(rsCSV.値) AS 最大"
    Set rsCalc = Cn.Execute(SQL)

    '結果を表示します。
    Debug.Print "直近5日間の平均は、"; rsCalc.Fields("平均").Value; "です。"
    Debug.Print "直近5日間の最大は、"; rsCalc.Fields("最大").Value; "です。"

    rsCalc.Close
    rsCSV.Close
    Cn.Close
    
    Set rsCalc = Nothing
    Set rsCSV = Nothing
    Set Cn = Nothing
End Sub


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -