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 件のコメント:
コメントを投稿