Power Automate DesktopからODBCでデータベースに接続する

Power Automate Desktopでデータベースを使う方法。

Power Automate Desktopではデータベースを扱うことができます。通常はプログラミング言語→必要に迫られデータベースという順序で習得していくので、そもそもデータベースを使えるようなスキルを持っているのならば、自動化の手段にRPAを選択する必要はない気もしますが、せっかく使えるっていうのなら使ってみたいですよね。

ODBCでデータベース接続

Power Automate Desktopのデータベース接続にはいくつか方法がありますが、今回はODBCを使用します。ODBCはPower Automate DesktopではなくOSが提供する機能なので、あらかじめOS側にセットアップしておく必要があります。やり方はインターネッツにわかりやすい解説がたくさんあるのでここでは詳しくはやりません。

DBMSにはPostgreSQLを使用します。データベース名はsaitamaで、publicスキーマーにテーブルcustomer_padを作成しました。内容は架空の個人情報で構成は次のようになっています。

pad-odbc5.png

このデータベースにODBCで接続するためのドライバーをインストールして接続情報を入力します。Power Automate Desktopでは64bitのODBCドライバーしか対応しないと公式リファレンスに明言されているので、試していませんがそうなのでしょう。64bitを使うようにしてください。

pad-odbc1.png

テストボタンで接続できたら、保存ボタンでこれを保存します。データソース名はあとで使うのでわかりやすく命名しておくことをオススメします。

フローでデータベースを使用する

ODBCが準備できたら、フローのアクションから データベース → SQL接続を開く でデータベースへの接続ができます。

pad-odbc10.png

パラメータは1個しかないので設定アイコンをクリックすると詳細設定のダイアログが開きます。

データリンクプロパティでプロバイダータブから Microsoft OLE DB Provider for ODBC Drivers を選択して次へボタンを押します。

pad-odbc2.png

接続タブに移動するので 接続文字列を使用する を選択して、ビルドボタンを押します。

データソース名を使用する を選ぶとデータソースの候補が選択でき、先に設定したデータソース名を指定して接続テストをすると成功になるのですが、実際にフローで走らせると失敗します。意味がわかりません。バグってるんでしょうか。とにかくこれを書いている時点では私の環境ではデータソース名で指定はできませんでした。

ということで、接続文字列の方でやらざるを得ません。

pad-odbc3.png

データソースの選択画面になるので、コンピューターデータソースタブで先に設定したODBCのデータソース名を選択してOKボタンを押します。

pad-odbc4.png

ここでまた最初のODBC接続の設定画面がでますが、そのままOKします。

データリンクプロパティ画面に戻るのでOKボタンを押します。

SQL接続を開くのプロパティに超絶長い文字列が入ったら完了です。

pad-odbc11.png

フローでデータベースを読み込む(Excelと速度比較もする)

データベースに対してSQLを実行するにはアクションの データベース → SQLステートメントの実行 です。当然ですがSQL接続を開くアクションより後に入れてください。

pad-odbc19.png

パラメーターは4つですが、3つはPower Automate Desktopが良きに計らってくれるのでデフォルト値で問題ないはずです。

SQLステートメント:にクエリを記述します。

用が済んだらアクションSQL接続を閉じるで後片付けしておきましょう。


さて、データベースの利点と言えばまずはスピードですよね。そこでExcelとのデータ読み込み速度比較をしてみます。

Excelで上のデータベースと同じ構成の個人情報10,000件をシートから読み込むだけのフローを作成します。

Excelシートはこのようになっており

pad-odbc12.png

フローはこうなります。

pad-odbc7.png

フローの最初と最後に日時を変数に格納して、差し引きで処理時間を秒でメッセージボックスに表示させるようにしています。

実行すると

pad-odbc9.png

2.18秒かかりました。

同じ要領でデータベースから10,000件を読み込むフローを作成します。

pad-odbc6.png

実行すると

pad-odbc8.png

0.76秒でした。

RPAでこの程度の実行スピードの差が死活問題になることはないでしょうが。速くて困ることはありませんね。

フローからデータベースを動的に操作する

SQLがハードコーディングだと利用できる状況が限定的すぎるので、対話形式で動的にデータベースからデータを取得できるようにしたいです。

Power Automate Desktopではアクションのメッセージボックスでユーザーから入力を受け付けたり、表示をしたりできます。VBAのユーザーフォームのようなものです。

では、名前の一部を入力すると候補者一覧を表示し、候補者一覧から1名を確定すると、その人物の詳細情報を表示するというフローを作成します。データベースは前段で使用したものをそのまま使います。

しくみとしては、入力ダイアログで検索値を受け取り、SQLでnameにWHERE条件として設定して実行した結果をname列のみリストから選択ダイアログに表示します。リストに表示されたnameから対象者を1名選択すると、選択されたnameでSQLを実行し全列のデータを取得してメッセージを表示アクションで全データを表示します。

フローはこのようになりました。

pad-odbc13.png

簡単のため一切エラーハンドリングをしていないので、実用するにはもう少しステップが必要です。

実行すると入力ダイアログが出るので検索値を入力してOKボタンを押します。

pad-odbc15.png

候補者の人数と一覧がリストで表示されます。

pad-odbc15.png

リストを展開して1名選びます。

pad-odbc16.png

対象者が選択された状態でOKボタンを押します。

pad-odbc17.png

対象者の詳細情報が表示されます。

pad-odbc18.png

表示が小さくて見づらかったり、生年月日に時刻が入ってしまったりしてますが、気にしないでおきます。

RPAの性質上、不特定多数が利用するわけではないので問題にはならないですが、ユーザー入力値をSQLに直ぶち込みなので(いまどきのアプリなので自動エスケープされてるとは思いますが)SQLインジェクションができそうで気持ち悪いですね。プリペアドステートメント的な機能もなさげなので使い勝手はイマイチです。

今回のようにクエリの結果を単に表示するのではなくExcelファイルに書き出すようにすると、他のアプリで使っているデータベースから必要な情報をExcelとして切り出すことができて、RPAとしてのメリットを活かせる予感がします。

おわり。

related pages
Power AutomateでExcelシートのリストからメールを送信する Part2
Power Automateで条件によって処理を変える方法。

前回の自動メール送受信管理簿のつづきです。Power Automateでは条件を判定して、その結果により処理を変えるには条件分岐コントロールを使います。VBAでいうところのIfに相当します。条件分岐コントロールでは条件とTrueの場合、Falseの場合のパラメーターを設定していきます。

Read More ...
Power Automate DesktopでExcelの表データを扱う
Excelデータの取得とFor~eachを使った繰り返し。

デスクトップレコーダーは簡単に利用できますが、人間が操作した作業を自動記録するだけです。これは劇的な業務効率化をなしとげるには必要不可欠な繰り返し・条件分岐といったロジックを組み込むことはできないということを意味します。そこで今回はフローを直接編集することで繰り返し処理を組み込んでみます。

Read More ...
Excelシートのリストからメールを送る
Outlookを使ってExcelのリストからメール送信します。

Excelシートにメールアドレス一覧ができていれば、それを使ってメールを送りたいと思いますよね。MS-OfficeにもれなくついてくるメールアプリOutlookをあなたがお使いならば、それはVBAで簡単に実現可能です。関数を利用して動的にメール文を作成したり、宛先によって添付ファイルを変えたりといった柔軟な処理ができます。

Read More ...
この記事の
作成日

2021-07-14

更新日

2021-07-21

ページ内検索
目次
WEB MASTER
さいた
神エクセル撲滅協会理事(自称)
さいたま市民 埼玉こそ地上の楽園