2013/01/06

PowerShell DAOでAccessファイルを操作

Access が導入されていない環境で accdb (Access ファイル)を操作する。ただし、DAOで。
 集計フィールドをどうやって作ればよいのだろうと右往左往した結果。新規ファイルを作成して、テーブルといくつかのレコードを追加するメモ。
 忘れてしまうほど使うことがない。

# ACE14.0以降が必要
# Microsoft Access Database Engine 2010 Redistributable
# http://www.microsoft.com/en-us/download/details.aspx?id=13255

$dbLangJapanese = ';LANGID=0x0411;CP=932;COUNTRY=0'
$dbVersion140 = 256
$dbVersion150 = 512
$dbLong = 4
$dbAutoIncrField = 16

$dbPath = ".\test00.accdb"
$dbTable = "Table00"

#Remove-Item -Path $dbPath

$dbe = New-Object -ComObject DAO.DBEngine.120

$db = $dbe.CreateDatabase($dbPath,
                          $dbLangJapanese,
                          $dbVersion140)

$tdf = $db.CreateTableDef($dbTable)

$fld = $tdf.CreateField("ID",$dbLong) 
$fld.Attributes = $dbAutoIncrField
$tdf.Fields.Append($fld)

$fld = $tdf.CreateField("Field1",$dbLong) 
$tdf.Fields.Append($fld)

$fld = $tdf.CreateField("Field2",$dbLong) 
$fld.Expression='[Field1] * 2'
$tdf.Fields.Append($fld)

$db.TableDefs.Append($tdf)

$idx = $tdf.CreateIndex("PrimaryKey")
$idx.Primary = $true
$fld = $idx.CreateField("ID")
$idx.Fields.Append($fld)

$tdf.indexes.Append($idx)

# 10レコード追加
$daoRs = $db.OpenRecordSet($dbTable)
10..1 | %{
    $daoRs.AddNew()
    $daoRs.Fields.Item("Field1") = $_
    $daoRs.Update()
}

# DAO.GetRowで出力 集計フィールドの演算を確認
$daoRs.MoveFirst()
$rc = $daoRs.RecordCount
$rows = $daoRs.GetRows($rc)
0..($rc - 1)|%{"{0}`t{1}`t{2}" -f $rows[0,$_], $rows[1,$_], $rows[2,$_]}

$db.Close()

Remove-Variable dbe,db,fld,tdf,idx,daors
これではPowershellである必要がないと思った。ちょっと勉強をしたということ。

0 件のコメント: