2017年3月12日

【PowerShell】Accessのaccdbファイルを作成しテーブルにデータを挿入するスクリプト



新規にAccessのaccdbファイルを作成し、テーブルにデータを挿入するスクリプトを作ってみました。

CreateAccessDbAndInsertData.ps1
#引数の値を変数に格納(ユーザーID, 名前, 備考)
$userid = $args[0]
$name = $args[1]
$remarks = $args[2]

#DBファイル名
$scriptPath = $MyInvocation.MyCommand.Path
$currentPath = Split-Path -Parent $scriptPath

$db = Join-Path $currentPath "test.accdb"

If(-not(Test-Path -Path $db))
{
    #DBファイルが存在しない場合作成する
    $application = New-Object -ComObject Access.Application
    $application.NewCurrentDataBase($db,12)
    $application.CloseCurrentDataBase()
    $application.Quit()

    #テーブル作成
    $connection = New-Object -ComObject ADODB.Connection
    $connection.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$db")

    $table = "T_Users"
    $fields = "ID Counter, ユーザーID Text, 名前 CHAR, 備考 Text"
    $command = "Create Table $table `($fields`)"
    $connection.Execute($command)
    $connection.Close()  
}

$connection = New-Object -ComObject ADODB.Connection
$connection.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$db")

$insCmd = "Insert into T_Users `(ユーザーID, 名前, 備考`) Values `('$userid', '$name', '$remarks'`)"
$connection.Execute($insCmd)
$connection.Close()  
このスクリプトファイルと同じ場所に「test.accdb」というaccdbファイルを作成し、「T_Users」というテーブルを作成しています。

あと、実行する際には、32ビットで実行するか、64ビットで実行するかに気を付けてください。
私の環境では32ビットじゃないと実行できませんでした。
これはおそらく、インストールされているAccessが32ビット用だからだと思われます。

実行例

PS C:\work\access> .\CreateAccessDbAndInsertData.ps1 '100201' '鈴木一郎' 'びこう'


Properties       : {Preserve on Abort, Blocking Storage Objects, Use Bookmarks, Skip Deleted Bookmarks...}
AbsolutePosition :
ActiveConnection : ADODB.ConnectionClass
BOF              :
Bookmark         :
CacheSize        : 1
CursorType       : adOpenForwardOnly
EOF              :
Fields           : {}
LockType         : adLockReadOnly
MaxRecords       : 0
RecordCount      :
Source           : Create Table T_Users (ID Counter, ユーザーID Text, 名前 CHAR, 備考 Text)
AbsolutePage     :
EditMode         :
Filter           : 0
PageCount        :
PageSize         : 10
Sort             :
Status           :
State            : 0
CursorLocation   : adUseServer
MarshalOptions   : adMarshalAll
DataSource       : ADODB.RecordsetClass
ActiveCommand    : System.__ComObject
StayInSync       : True
DataMember       :
Index            :

Properties       : {Preserve on Abort, Blocking Storage Objects, Use Bookmarks, Skip Deleted Bookmarks...}
AbsolutePosition :
ActiveConnection : ADODB.ConnectionClass
BOF              :
Bookmark         :
CacheSize        : 1
CursorType       : adOpenForwardOnly
EOF              :
Fields           : {}
LockType         : adLockReadOnly
MaxRecords       : 0
RecordCount      :
Source           : Insert into T_Users (ユーザーID, 名前, 備考) Values ('100201', '鈴木一郎', 'びこう')
AbsolutePage     :
EditMode         :
Filter           : 0
PageCount        :
PageSize         : 10
Sort             :
Status           :
State            : 0
CursorLocation   : adUseServer
MarshalOptions   : adMarshalAll
DataSource       : ADODB.RecordsetClass
ActiveCommand    : System.__ComObject
StayInSync       : True
DataMember       :
Index            :


実際に作成されたtest.accdbファイルを開いてみると、このようにテーブルにデータが格納されています。


<参考サイト>
https://gallery.technet.microsoft.com/office/28a08699-7d60-492c-bc97-d6456a6c3739



スポンサーリンク