データベースからのインポートをLabTalk置換で更新する

概要

このチュートリアルは説明のみを目的としています。チュートリアルに示されている接続文字列は、インストールされたデータベースには接続しません。チュートリアルで説明したプロセスを実行できるように、独自のサーバーに AdventureWorks データベースをセットアップする場合は、 このGitHubページを参照してください。

このチュートリアルでは、LabTalk置換表記とともにSQLエディタを使用してデータベースから Origin ワークシートにデータをインポートする方法を示します。さらに、インポートしたデータで棒グラフを作成します。次に、定義したLabTalk変数を変更して、ワークシートデータとプロットを更新します。

必要なOriginのバージョン:8.5.1 SR0

学習する項目

このチュートリアルでは、以下の項目について解説します。

  • SQLエディタを使ってデータをインポートする
  • SQLステートメント内でLabTalk置換を使う
  • 棒グラフを作図する
  • データベースからのインポートをLabTalk置換で更新する

ステップ

サーバマシンnoho上にSQLサーバAdventureWorks2008を予めセットアップ済であることを想定しています。

データをデータベースからインポートし、棒グラフを作成する

  1. 新しいプロジェクトを開始します。データベースアクセスツールバーのSQLエディタを開くボタンをクリックしてSQLエディタを起動します。
    ImportDataDatabase 1.png
  2. メニューからファイル:接続文字列の編集を選択してテキストボックスに以下の接続文字列を入力します。
    Provider=SQLOLEDB.1;
    Password=labtalk2015;
    Persist Security Info=TRUE;
    USER ID=CONNECT;
    Initial Catalog=AdventureWorks2008;
    DATA SOURCE=noho
    
  3. テストボタンをクリックして接続を確認します。問題なければ、OKをクリックしてデータベースにアクセスします。
  4. SQLエディタでクエリー:LabTalk...と操作し、LabTalkサポート設定ダイアログを開きます。このダイアログでは、LabTalk (%,$) Substitutionをするのチェックにチェックを付け、以下のLabTalkスクリプトをクエリー前のスクリプトテキストボックスに貼り付けます。
    string myStartDate$ = "1/1/2003";  // 最初の日付置換
    string myEndDate$ = "12/31/2003";  // 2番目の日付置換
    string myStrName$ = "LineTotalFor2003";  // 名前
    
    ImportDataDatabase 21.png
  5. OK をクリックして、SQLエディタに戻ります。右側のテキストボックスに以下のSQLステートメントを入力します。
    SELECT Production.ProductCategory.Name, LINETOALANDNAMEYEAR.%(myStrName$) FROM 
                    (SELECT SUM(SALEANDPRODUCTYEAR.LineTotal) AS %(myStrName$), Production.ProductSubcategory.ProductCategoryID
                    FROM
                            (SELECT SALEINFOYEAR.LineTotal, PRODUCTINFOYEAR.ProductSubcategoryID
                            FROM
                                    (SELECT Sales.SalesOrderheader.OrderDate, Sales.SalesOrderDetail.LineTotal, Sales.SalesOrderDetail.ProductID
                                    FROM Sales.SalesOrderheader 
                                    INNER JOIN Sales.SalesOrderDetail 
                                    ON Sales.SalesOrderheader.SalesOrderID=Sales.SalesOrderDetail.SalesOrderID
                                    WHERE Sales.SalesOrderheader.OrderDate BETWEEN '%(myStartDate$)' AND '%(myEndDate$)') AS SALEINFOYEAR
                            INNER JOIN 
                                    (SELECT Production.Product.ProductID, Production.Product.ProductSubcategoryID
                                    FROM Production.Product) AS PRODUCTINFOYEAR
                            ON SALEINFOYEAR.ProductID=PRODUCTINFOYEAR.ProductID) AS SALEANDPRODUCTYEAR
                    INNER JOIN Production.ProductSubcategory 
                    ON SALEANDPRODUCTYEAR.ProductSubcategoryID=Production.ProductSubcategory.ProductSubcategoryID
                    GROUP BY Production.ProductSubcategory.ProductCategoryID) AS LINETOALANDNAMEYEAR
            INNER JOIN Production.ProductCategory
            ON LINETOALANDNAMEYEAR.ProductCategoryID=Production.ProductCategory.ProductCategoryID
    
    ImportDataDatabase 22.png

    上の図で確認できるように、合計で3つのLabTalk変数がステートメントの中で使用されています。

  6. ツールバーの最後のボタンButton db Preview LabTalk Substitute.pngをクリックすると、置換結果を見ることができます。
    ImportDataDatabase 23.png
  7. メニューから、ファイル:アクティブワークシートに保存を選択し、この設定をワークシートに保存します。そして、ワークシートにデータをインポートボタンButton db Import Data.pngをクリックしてインポートを行います。
  8. SQLエディタを閉じます。次の画像で、インポートされたデータを確認出来ます。列Bのロングネームは"LineTotalFor2003"で、LabTalk変数で設定されたものです。
    ImportDataDatabase 24.png
  9. ワークシート内の列Bを選択し、作図:棒グラフ/円グラフ:縦棒グラフと操作して縦棒グラフを作図します。
    ImportDataDatabase 25.png

データベースからのインポートをLabTalk置換で更新する

LabTalk変数myStartDate$myEndDate$myStrName$ は、どの年のデータをデータベースからインポートするかをコントロールするために使用されます。他の年のデータをインポートする一つの方法として、この変数値をLabTalkサポート設定ダイアログで編集する方法があります。

  1. 上記でインポートしたデータが入力されているワークシートをアクティブにします。SQLエディタを開くボタンButton db Create.pngをクリックすると、SQLエディタが保存した設定とともに開きます。
  2. クエリー:LabTalkと選択してLabTalkサポート設定ダイアログを開きます。myStartDate$、 myEndDate$myStrName$ の3つの変数の値を変更します。
    string myStartDate$ = "1/1/2004";  // 最初の日付置換
    string myEndDate$ = "12/31/2004";  // 2番目の日付の置換
    string myStrName$ = "LineTotalFor2004";  // 名前
    
    ImportDataDatabase 26.png
  3. OK をクリックして、SQLエディタに戻ります。クエリー設定を保存ボタンをクリックし、ワークシートにデータをインポートボタンButton db Import Data.pngをクリックします。SQLエディタを閉じます。
  4. ワークシートのデータとグラフが更新されたことがわかります。
    ImportDataDatabase 27.png
    ImportDataDatabase 28.png

しかし、変数値を編集するためにSQLエディタを開く必要があるので、この方法はあまり便利ではありません。LabTalkサポート設定の修正のより良い方法は、グローバル変数を使用することです。そして、グローバル変数を編集すれば、SQLエディタを使用せずに再インポートできます。

  1. 再度ワークシートをアクティブにして、Button db Create.pngをクリックしてSQLエディタを開きます。
  2. メニューのクエリー:LabTalkを選択して、LabTalkサポート設定を以下のように編集します。
    string myStartDate$ = "";  // 最初の日付置換 string myEndDate$ = "";  // 2番目の日付置換 string myStrName$ = "";  // 名前 if(exist(startDate$, 18) == 18)  // startDate$があるかどうか { myStartDate$ = startDate$;  // あれば、それをmyStartDate$として使う } else { myStartDate$ = "1/1/2003";  // なければ、1/1/2003 を myStartDate$とする } if(exist(endDate$, 18) == 18)  // endDate$があるかどうか { myEndDate$ = endDate$;  // あれば、それをmyEndDate$として使う } else { myEndDate$ = "12/31/2003";   // なければ12/31/2003を使う } if(exist(strName$, 18) == 18)  // strName$があるか { myStrName$ = strName$;  // あれば、それを strName$として使う } else { myStrName$ = "LineTotalFor2003";  // なければLineTotalFor2003をstrName$とする }
    
    ImportDataDatabase 29.png
  3. SQLエディタクエリー設定を保存ボタンをクリックして、閉じます。
  4. メインメニューのウィンドウ:スクリプトウィンドウを選択して、スクリプトウィンドウを開きます。
  5. スクリプトウィンドウに以下のスクリプトを貼り付け、すべて選択してからキーボードのEnterキーを押して実行します。
    string startDate$ = "1/1/2003"; // startDate$文字列変数を定義 string endDate$ = "12/31/2004"; //endDate$文字列変数を定義 string strName$ = "LineTotalFor2003and2004"; // strName文字列変数を定義 dbimport; // データベースからデータをインポート
    
  6. ワークシートのデータとグラフが更新されます。

Note:

  1. ここでは、3つの「グローバル」LabTalk変数を定義しました。この「グローバル」は、LabTalk変数を「見える」ようにし、SQLエディタの置換で使用できるようにすること意味します。
  2. 最後の dbimport LabTalkコマンドは、データアクセスツールバーのデータのインポートButton db Import Data.pngをクリックするのと同じです。