EViews Database Objectライブラリ

EViews データベース オブジェクト (EDO) ライブラリを使用すると、外部アプリケーション内からEViewsデータベースおよびワークファイル内に保持されているデータオブジェクトにアクセスできるようになります。

データ

EDOライブラリの概要

  1. このAPIは、EViewsデータベースへの完全な読み取りおよび書き込みアクセスに加え、EViewsワークファイルへの読み取り専用アクセスを提供します。このインターフェースは、オブジェクトの観測値と属性の両方へのアクセスを提供します。EViews OLE DBインターフェースは、EViewsファイル形式のデータへのアクセスも提供しますが、書き込み操作とオブジェクト属性はサポートしていません。
    EViews Database Object (EDO)ライブラリの主なオブジェクトはEViews Database Extension (EDX) APIで定義されたインターフェースに準拠しているため、このインターフェースはEDX APIと関連しています。しかし、この2つの機能の使用シナリオは大きく異なります。EDX APIを使用すると、独自のデータベースマネージャクラスとデータベースクラスを実装することで、EViewsを外部データソースに接続できます。EDOライブラリを使用すると、EViewsで既に実装されているライブラリのデータベースマネージャオブジェクトとデータベースオブジェクトを使用することで、EViews以外のアプリケーションでEViewsファイル形式に保存されているデータを操作できます。
  2. EDOライブラリは次のEViewsデータオブジェクトの読み書きをサポートしています
    • 数値系列(日時データ含む)
    • アルファ系列
    • スカラー
    • ベクトル
    • 行列
    • 文字列
    • 文字列ベクトル
  3. EDOライブラリは3つの要素で構成されています:
    • EViewsDatabaseManager: マネージャークラスは、すべてのデータベースアクティビティのエントリポイントです。マネージャーはセッション中に一度だけ作成する必要があります。マネージャーの主な役割は、特定のデータベースまたはワークファイルが開かれるたびに、新しいEViewsDatabaseオブジェクトを返すことです。
    • EViewsDatabase: データベースクラスは、現在開いているEViewsデータベースまたはワークファイルを表します。データベースクラスの主なタスクは、オブジェクトの読み取り、オブジェクトの書き込み、そしてデータベース内のオブジェクトの検索です。
    • Frequency: 頻度クラスは、EViews内でカレンダーの日付と頻度を操作するための機能をエクスポートするユーティリティクラスです。頻度クラスの使用はオプションであり、データベースマネージャやデータベースクラスの関数の引数にはなりません。
    EViewsDatabaseManagerクラスとEViewsDatabaseクラスは、EDX APIで定義されたインターフェースを実装しています。これらのインターフェース内の関数の詳細な説明とFrequencyクラスの完全なドキュメントについては、EDX APIドキュメントを参照してください。

例題く

データベースやワークファイルを開く

  1. データベースまたはワークファイルを開くには、まず EViewsDatabaseManagerクラスを作成し、次にデータベースマネージャによって提供されるOpenDb()関数を呼び出してデータベースを開く必要があります。

    Dim dbPath = "C:\mydir\mydb.edb"
    Dim dbMgr = New EViewsEdx.EViewsDatabaseManager
    Dim db = dbMgr.OpenDb(dbPath, EViewsEdx.OpenCreateMode.FileOpen, EViewsEdx.ReadWriteMode.FileReadOnly, "", "", "")
    db.Close()
    dbMgr.Close()

    セッションごとにデータベースマネージャを1つだけ構築してください。データベースオブジェクトライブラリは、各スレッド内で個別のDatabaseManagerを構築した場合でも、現時点ではスレッドセーフではないことに注意してください。
  2. オブジェクトを読みこむ

  3. データベースまたはワークファイルから EViews データ オブジェクトを取得するには、データベース クラスのReadObject()関数を呼び出すだけです。
    Dim attr = Nothing
    Dim vals = Nothing
    Dim ids = Nothing
    db.ReadObject("myseries", "", attr, vals, ids)

    この関数の最初の引数は、取得したいオブジェクトの名前です。2番目の引数は、保存先の頻度です。EViewsデータベースとワークファイルでは、各オブジェクト名には単一の頻度のデータしか保存できないため、これは無関係です。
    オブジェクトのデータは、attr, vals, idsの3つの引数で返されます。attrには、頻度を表す「freq」、開始日を表す「start」、終了日を表す「end」などの属性名と値のテーブルに加え、ユーザーがオブジェクトに追加したカスタム属性が含まれます。属性名は属性配列の最初の列に、値は2番目の列に表示されます。valsには観測値の配列が含まれます。ほとんどの場合、これは1次元配列ですが、行列の場合は2次元配列になります。配列は、オブジェクトのタイプに応じて、数値、文字列、または日付値で構成されます。
    ids配列はseriesオブジェクトに対してのみ返されます。この配列には、各観測値の開始日が含まれます。ids配列の要素数はvals配列と同じになります。
  4. オブジェクトを書き込む

  5. EViewsデータベースにオブジェクトを書き込むには、WriteObject()関数を使用します。WriteObject関数は、書き込むオブジェクトの種類に応じて、さまざまな入力形式をサポートしています。時系列を記述するには、明示的に頻度と開始日の属性を指定します。
    データ頻度と開始日時を明示する
    Dim attr As String = "freq=Q, start=2010Q1"
    Dim vals = New Double(0 To 3) {1.0, 2.0, 3.0, 4.0}
    db.WriteObject("myseries", attr, vals, Nothing, EViewsEdx.WriteType.WriteOverwrite)

    または、各データ値の観測日付の配列を指定して、EViews に自動的に頻度を決定させることもできます。
    Dim vals = New Double(0 To 3) {1.0, 2.0, 3.0, 4.0}
    Dim ids = New Date(0 To 3) {#3/31/2010#, #6/30/2010#, #9/30/2010#, #12/31/2010#}
    db.WriteObject("myseries", Nothing, vals, ids, EViewsEdx.WriteType.WriteOverwrite)

    行列を書き込むには、「type」属性の値を「matrix」に設定し、2次元の値の配列を渡します。
    Dim attr As String = "type=matrix"
    Dim vals = New Double(0 To 3, 0 To 1) {{1, 2}, {3, 4}, {5, 6}, {7, 8}} db.WriteObject("mymatrix", attr, vals, Nothing, EViewsEdx.WriteType.WriteOverwrite)

    または、1 次元の値の配列を渡し、「rows」属性と「cols」属性を使用して次元を指定します
    Dim attr As String = "type=matrix, rows=4, cols=2"
    Dim vals = New Double(0 To 7) {1, 2, 3, 4, 5, 6, 7, 8} db.WriteObject("newname", attr, vals, Nothing, EViewsEdx.WriteType.WriteOverwrite)

    文字列ベクトルは文字列の配列を使用して渡すことができます。
    Dim attr As String = "type=svector"
    Dim vals = New String(0 To 4) {"here", "are", "some", "string", "values"} db.WriteObject("newname", attr, vals, Nothing, EViewsEdx.WriteType.WriteOverwrite)

    スカラーおよび文字列オブジェクトは、単純なインライン値を使用して記述できます。
    db.WriteObject("myscalar", "type=scalar", 100.0, Nothing, EViewsEdx.WriteType.WriteOverwrite)
    db.WriteObject("mystring", "type=string", "hello EViews!", Nothing, EViewsEdx.WriteType.WriteOverwrite)

    EViews データベースでサポートされている上書きオプションは、同じ名前の既存のオブジェクトを上書きする WriteOverwrite と、同じ名前の既存のオブジェクトが存在する場合に RECORD_NAME_IN_USE 例外をスローする WriteProtect のみであることに注意してください。
  6. オブジェクトの検索

  7. 指定された条件を満たすデータベースまたは作業ファイル内のオブジェクトのリストを取得するには、まず SearchInitialize() を呼び出して検索を開始し、次に SearchNext() を繰り返し呼び出して各オブジェクトの結果 1 つずつを取得します。
    まず検索を初期化します。
    db.SearchByAttributes("name matches abc*", "name, type")

    検索結果を入手します。
    Dim name As String = Nothing
    Dim attr As Object = Nothing
    While (db.SearchNext(name, attr))

    ここに項目ごとにコードを追加していきます。
    End While
    SearchByAttributes の searchExpression 引数を使用すると、属性に基づいて返すオブジェクトを選択するための条件を指定できます。次に例を示します。
    “freq=m and start<1970”
    1970年以前の履歴が利用可能なすべての月次シリーズを選択します。attrNames引数は、検索条件に一致する各オブジェクトから返される属性を選択します。属性名はカンマで区切る必要があります。属性は、SearchNext()によって 2次元配列で返され、最初の列に属性名、2番目の列に属性値が含まれます。
  8. オブジェクトの管理

  9. EViewsデータベース内のオブジェクトは、CopyObject、RenameObject、DeleteObject関数を使用してコピー、名前変更、削除できます。オブジェクト名にはワイルドカード(不明な1文字を表す「?」、不明な0文字以上の文字を表す「*」)を使用することで、複数のオブジェクトをまとめてコピー、名前変更、削除できます。
    存在しないオブジェクトをコピー、名前変更、または削除しようとすると、RECORD_NAME_INVALID 例外がスローされます。
    オブジェクトをコピーまたは名前変更して、既に別のオブジェクトで使用されている名前にしようとすると、RECORD_NAME_IN_USE例外がスローされます。次のコードは、オブジェクトのコピー時に、既存のオブジェクトを上書きしてもよいかどうかをユーザーに確認する例を示しています。
    Dim errorCode As EViewsEdx.ErrorCode = 0
    Try

    上書きせずにコピーを試します。
     db.CopyObject(OldName, NewName, False)

    Catch errorInfo As COMException
     errorCode = errorInfo.ErrorCode
     If (errorCode <> EViewsEdx.ErrorCode.RECORD_NAME_IN_USE) Then
      ProcessComError(errorInfo)
     End If
     Exit Try
    End Try


    既存のオブジェクトが見つかった場合は、上書きするかどうかを尋ねます
    If (errorCode = EViewsEdx.ErrorCode.RECORD_NAME_IN_USE) Then
     If (MsgBox("Object " & NewName & " already exists. Overwrite the existing object?", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok) Then
      Try

    ユーザは上書きを確認したので、上書きでコピーを試してください
       db.CopyObject(OldName, NewName, True)
      Catch errorInfo As COMException
       ProcessComError(errorInfo)
       Exit Try
      End Try
     End If
    End If

    COMExceptionクラスにはErrorCodeメンバーが含まれています。このメンバーの値をEViewsEdx.ErrorCode列挙体の値と比較することで、コード内で特定のエラー原因に対する処理を追加できます。
    COMExceptionクラスにはMessageメンバーも含まれています。このメンバーには、発生したエラーに関する人間が読める形式の説明が含まれます。このテキストは通常、エラーを具体的に処理していない場合は常にユーザに表示されます。

サンプルプログラム

  1. サンプルプロジェクトEdoSampleには、EViewsデータオブジェクトライブラリのさまざまな側面を示すシンプルなアプリケーションの完全なソースコードが含まれています。
    アプリケーションが起動すると、ユーザーが開くEViewsデータベースまたはワークファイルを選択できるフォームが表示されます。次に、名前のパターンを指定して、データベースまたはワークファイル内のオブジェクトを検索できます。
    データベースを開く場合、「Rename」、「Copy...」、「Delete」ボタンを使用して、データベース内の選択したオブジェクトの名前を変更、コピー、削除できます。EViewsワークファイルでは、ワークファイルの内容の部分的な変更がサポートされていないため、これらの機能はサポートされていません。
  2. オブジェクトをダブルクリックすると、選択したオブジェクトの値と属性を表示できます。

    オブジェクト表示フォームは、コードファイル ObjectForm.vb に実装されています。ObjectFormは、メモリ内に保持されたオブジェクトの属性と観測値のコピーのみを使用するため、EViewsDatabaseManager クラスや EViewsDatabaseクラスを直接使用しません。このクラスのコードには、Frequencyユーティリティクラスを使用して観測値と日付値を切り替えたり、日付を表示用にフォーマットしたりする例がいくつか含まれています。
page_top_icon