弁財天

ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」

Win10のPowerShellでAccess97の.mdbファイルをAccess2003の.mdbに変換w

[仁義なきキンタマ] 211(8ED4E3A4)のドキュメント\仕事用\藤田部長\山口組後藤組資料\捜本資料\深川・会社社長けん銃殺人特捜本部\深川特捜本部電話帳1.mdb
なるファイルがあって、Access97の.mdbファイルのよーだ。

Win10のAccess2016で開こうとすると、
「前のバージョンでアプリケーションで作成されたデータベースを開くことはできません。」
のエラーになる。

では、.mdbファイルを開いて、とりあえず.csvファイルでLinuxでも読めるよーにするのは、どーすればいいのか?

Access 2016(64 bit +win10Home)でmdbファイルは開ける MS Access 2013 Later can Open mdb file

すっげー。 パワーシェルで「DAO.DBEngine.36」を作成してAccess2003の.mdbファイルに変換するらすい。

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exeを管理者モードで起動。

Set-ExecutionPolicy Unrestricted -scope LocalMachine

PS C:\WINDOWS\system32> Set-ExecutionPolicy Unrestricted -scope LocalMachine

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y
PS C:\WINDOWS\system32>
UTF8でスクリプトconv.ps1を作成。中のパスを編集して変える。
Set-ExecutionPolicy Restricted
$db97 = "C:\Users\hoge\Somewhere\山口組後藤組資料\捜本資料\深川・会社社長けん銃殺人特捜本部\深川特捜本部電話帳1.mdb"
#$db2003=[Environment]::GetFolderPath('Desktop') + "\2003.mdb"
$db2003="C:\Users\hoge\Somewhere\山口組後藤組資料\捜本資料\深川・会社社長けん銃殺人特捜本部\深川特捜本部電話帳1_2003.mdb"
$dbLangJpn=';LANGID=0x0411;CP=923;COUNTRY=0'
$dbVer40=0x40
$dbe=New-Object -ComObject DAO.DBEngine.36
$dbe.CompactDatabase($db97,$db2003,$dbLangJpn,$dbVer40,$dbLangJpn)
Remove-Variable dbe
# Set-ExecutionPolicy Restricted
# New-Object -ComObject DAO.DBEngine.36 CompactDatabase

cd C:\Users\hoge\Somewhere\山口組後藤組資料\捜本資料\深川・会社社長けん銃殺人特捜本部
./conv.ps1
で実行すると変換された「深川特捜本部電話帳1_2003.mdb」が作成される。
この.mdbファイルは最初が保護違反で落ちるがw、2回目からはAccess 2016で開くことができる。
中の表「991210更新最新版捜査本部総合度監電話ナンバー1」を.csvファイルにエキスポートしてLinuxで使えばいいのだな。

同じディレクトリに.mdbファイルが複数あって、まとめて変換するときは、

#$DIR="C:\Users\hoge\Somewhere\山口組後藤組資料\捜本資料\練馬・喫茶店けん銃殺人特捜本部"
# カレントディレクトリのほうが使いやすいかもw
$DIR=$Pwd.Path

$dbLangJpn=';LANGID=0x0411;CP=923;COUNTRY=0'
$dbVer40=0x40

$List=Get-ChildItem *.mdb -Name
foreach($m in $List)
{
  $target = "$DIR\$m"
  $b = (Get-Item $m).BaseName
  $mdb2003 = "$DIR\$b" + "_2003.mdb"
  echo $mdb2003
  $dbe=New-Object -ComObject DAO.DBEngine.36
  $dbe.CompactDatabase($target,$mdb2003,$dbLangJpn,$dbVer40,$dbLangJpn)
  Remove-Variable dbe
}

投稿されたコメント:

コメント
コメントは無効になっています。