knowledge AutoMate 自習用コンテンツ その11 - 解説

自習用コンテンツ その11(https://automate.sct.co.jp/knowledge/13895/)の内容は如何でしたでしょうか?
簡単に出来てしまった方も、難しかった方もいたかと思います。

下記では、解説を書いていきます。
(解答例のコードは、ページ最下部に書いています。)


■観点
今回のコンテンツでは、「ODBCによるアクセス」および「表の結合」を観点としました。
 
 

■1. SQL接続をオープンしセッションを作成

「データベース - SQL接続を開く」アクションを使用し、SQL接続をオープンします。
プロバイダーは「Microsoft OLE DB Provider for ODBC Drivers」、データソースは作成したもの(例では「ExcelReader」)を指定します。

<AMDATABASE SESSION="DatabaseSession1" CONNECTION="0AM57xy/l1CbIQLFDTc7cIcpHehHUcsRGgnRV+yGPuIIIbFvzX8E8xuuZCojNZedvCmwAm4VqxU6jSWEJMBlu/++ezL/Wl3eSZhp4NFEVoyToJA=aME" />

 
 

■2. SQL文を発行し、データを取得

「データベース - SQLクエリ」アクションを使用し、SQL文を実行します。
2テーブル(ファイル)を結合するキーは「orderId」になります。この列をキーとし、表の結合を実施します。
また、結果を格納するデータセットとして「ds_DATA」を指定します。
※解凍したフォルダはデスクトップ上に存在すると仮定します
【SQL文】
select h.orderId, tokuiId, soukoId, orderIndex, shohinCd, shohinQty, orderDateTime
FROM `%GetDesktopDirectory()%\00013895\AMORDERHEAD.xlsx`.`AMORDERHEAD$` h
INNER JOIN `%GetDesktopDirectory()%\00013895\AMORDERDETAIL.xlsx`.`AMORDERDETAIL$` d on h.orderId = d.orderId;

または
【SQL文】
select h.orderId, h.tokuiId, h.soukoId, d.orderIndex, d.shohinCd, d.shohinQty, h.orderDateTime
from `%GetDesktopDirectory()%\00013895\AMORDERHEAD.xlsx`.`AMORDERHEAD$` h, `%GetDesktopDirectory()%\00013895\AMORDERDETAIL.xlsx`.`AMORDERDETAIL$` d
where h.orderId = d.orderId;

のいずれかのSQL文で取得できます。

<AMDATABASE ACTIVITY="sql_query" SESSION="DatabaseSession1" RESULTDATASET="ds_DATA">select h.orderId, tokuiId, soukoId, orderIndex, shohinCd, shohinQty, orderDateTime FROM `%GetDesktopDirectory()%\00013895\AMORDERHEAD.xlsx`.`AMORDERHEAD$` h INNER JOIN `%GetDesktopDirectory()%\00013895\AMORDERDETAIL.xlsx`.`AMORDERDETAIL$` d on h.orderId = d.orderId;</AMDATABASE>

 
 

■3. SQL接続をクローズ

一度SelectすればもうDB接続を使わないので「データベース - SQL接続を閉じる」アクションを使用し、SQL接続をクローズします。
※接続をクローズしないと、接続先DBによってはセッションが残り続けてしまい他の業務に影響を及ぼす可能性があります。必ず使用した接続は破棄します。

<AMDATABASE ACTIVITY="close_sql_connection" SESSION="DatabaseSession1" />

 
 

■4. CSVにデータセットを書き出し

「ファイルシステム - データセットからCSV」を使用し、「■2」で取得したデータセット「ds_DATA」をCSVファイルに書き出します。

<AMFILESYSTEM ACTIVITY="dataset_to_csv" DESTINATION="%GetDesktopDirectory()%\00013895\RESULT.csv" RESULTDATASET="ds_DATA" OVERWRITE="YES" WRAPCELLS="YES" />

 
 

今回構築する処理は以上になります。

■そのほか、留意事項
接続先DBがSQL Serverであれば、SQL ServerのODBCドライバはWindows10に初めからついているので、個別インストールなどは必要ありません。
一方で、接続先がOracleやPostgreSQLをはじめとする他のDBMSだった場合はまずODBCドライバを入手・インストールするとこから始めなくてはなりません。

(処理構築例)

<!--SQL接続を開く データソース名は環境に応じて変更-->
<AMDATABASE SESSION="DatabaseSession1" CONNECTION="0AM57xy/l1CbIQLFDTc7cIcpHehHUcsRGgnRV+yGPuIIIbFvzX8E8xuuZCojNZedvCmwAm4VqxU6jSWEJMBlu/++ezL/Wl3eSZhp4NFEVoyToJA=aME" />
<!--SQL文の実行-->
<AMDATABASE ACTIVITY="sql_query" SESSION="DatabaseSession1" RESULTDATASET="ds_DATA">select h.orderId, tokuiId, soukoId, orderIndex, shohinCd, shohinQty, orderDateTime FROM `%GetDesktopDirectory()%\00013895\AMORDERHEAD.xlsx`.`AMORDERHEAD$` h INNER JOIN `%GetDesktopDirectory()%\00013895\AMORDERDETAIL.xlsx`.`AMORDERDETAIL$` d on h.orderId = d.orderId;</AMDATABASE>
<!--SQL接続は使い終わったら必ず閉じる-->
<AMDATABASE ACTIVITY="close_sql_connection" SESSION="DatabaseSession1" />
<!--データセットの書込み-->
<AMFILESYSTEM ACTIVITY="dataset_to_csv" DESTINATION="%GetDesktopDirectory()%\00013895\RESULT.csv" RESULTDATASET="ds_DATA" OVERWRITE="YES" WRAPCELLS="YES" />