小ネタ:パスワード付きのAccessに接続する|Power Query
2020/9/22:おまけ2:AdoDotNet.Query関数を追加しました。
※もともと、コメントに入れてました。
OLE DB、Accessになじみのある方には秒殺だと思いますが、僕は発想もなかったので書き残しておきます。
恐らく、OLE DB接続の方でパスワード処理に対応している接続先には、同じ手口が使えるのではないかと思います。
読み取るaccdbについて
Accessのパスワードといっても、2種類あって、「以前の暗号化方式」でないとだめなのです。
「以前の暗号化方式」というのは下記のAccessのオプションにて設定します。
接続例
GUIの呼び出しは下記の画面から。接続文字列をそのまま貼りたい場合はその方が便利でしょう。
僕は接続文字列自体に不慣れだったので、レコード型で探り探り書いたところ、下記ようなコードになりました。
この例でのパスワードは「abc」です。
let
Source = OleDb.Query(
//いわゆる接続文字列。伝統的な、セミコロン区切りの文字列でも通ります。
[
Provider="Microsoft.ACE.OLEDB.12.0",
Data Source="C:\Users\Public\Documents\TestDatabase.accdb",
#"Jet OLEDB:Database Password" ="abc"
],
//SQLを記述。下記程度のは通りました。文字列はシングルクウォートで。
"SELECT 仕訳帳.借方, Sum(仕訳帳.金額) AS 金額の合計
FROM 仕訳帳
WHERE 仕訳帳.日付<=#2015/12/31# AND 仕訳帳.借方>='500'
GROUP BY 仕訳帳.借方;
"
)
in
Source
テスト環境
- Office365のExcel(バージョン1911 ビルド12228.20250クイック実行)
- 同じくAccess
なお、下記をインストール済みです。PowerShellからADO.NETで接続するのには必要だったので、入れていました。本件には必須ではないかもしれません。
Download Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント from Official Microsoft Download Center
おまけ:パスワードつきのExcelはどうなのか。
パスワードをクエリに入れとけば、接続できる――という例にはいまだお目にかかったことがありません。
調べた限り、OLE DBでもできないようです。
なので、現状は、VBAか何かで読み取り対象のブックを開いた状態で、クエリを実行するしかないようです。
ちなみに、Excelの書き込み専用パスワードだけなら、Power Queryは普通に接続できます。
おまけ2:AdoDotNet.Query関数
Oledb.Query関数のみならず、こちらでも同様にパスワード付きのaccdbにアクセス可能です。
.NET Frameworkプロバイダの指定が増えるだけで、connectionString
引数は上記の例と同様です。
当方、.NET Frameworkに詳しくないので、こちらを経由させる利点はよく分かりません。(検証も浅いです)
= AdoDotNet.Query("System.Data.OleDb",
[
Provider ="Microsoft.ACE.OLEDB.12.0",
#"Data Source"="C:\Users\Public\Documents\TestDatabase.accdb",
#"Jet OLEDB:Database Password" ="abc"
],
"SELECT * FROM t_単価")
参考
AdoDotNet.Query - PowerQuery M - Microsoft Docs
ヒントが少なく、例すらないのは、使おうと思うような人ならどうせ知っているだろう、ということなのでしょうか。.NET Frameworkに親しんでいる人ならできるんでしょうけども…。
Author And Source
この問題について(小ネタ:パスワード付きのAccessに接続する|Power Query), 我々は、より多くの情報をここで見つけました https://qiita.com/tanuki_phoenix/items/ef5bf6865480db471528著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .