PowerShellのスクリプトからJoyWatcherのデータベース(JWDB)を操作します。確認した実行環境は、以下となります。
使用例を以下に示します。テーブルの日付時間(ptime)は、realとしています。日付時間文字列を#文字で囲むことにより
日付時間として処理されます。また、読み込んだ日付時間は、文字型の実数ですので.NETのDateTime::FromOaDateにより
DateTime型に変換しています。
JWDBの関数仕様については、「JoyWatcher JWDBApi ActiveXヘルプ」を参照して下さい。
実行は、32ビット(x86)用PowerShellコンソールまたは、ISEで行って下さい。
# jwDb.ps1 jwdb操作例
$jwDb = New-Object -ComObject JWDBApiXControl1.JWDBApi
$sJwsv = "localhost" # joyWatcherサーバ IPアドレス or パソコン名
# joywatcher db 接続確認
$sSQL = "SELECT datetime('NOW')"
try{
$ir = $jwdb.ExecSQL($sJwsv, $sSQL)
}
catch{
Write-Host "jwdb接続エラー "
exit
}
$sSQL = "CREATE TABLE IF NOT EXISTS tbl7 (" +
"id int PRIMARY KEY," +
"ptime real," +
"cnote text)"
$ir = $jwdb.execSQL($sJwsv, $sSQL)
$sSQL = "CREATE INDEX IF NOT EXISTS indx1 ON tbl7 (ptime)"
$ir = $jwdb.execSQL($sJwsv, $sSQL)
$sSQL = "SELECT max(id) FROM tbl7"
$ir = $jwdb.execSQL($sJwsv, $sSQL)
$id = 0
if ($jwdb.rowCount -ne 0){
$id = [int]$jwdb.columnText(0,0)
}
$id += 1
# 現在時間
$sdt = [DateTime]::Now.ToString("yyyy/MM/dd HH:mm:ss")
#$sdt = $(Get-Date).ToString("yyyy/MM/dd HH:mm:ss") #<--- こちらでも可
$sSQL = "INSERT INTO tbl7 VALUES (" + [string]$id + ", #" + $sdt + "#, '日本abc123')"
$ir = $jwdb.execSQL($sJwsv, $sSQL)
$sSQL = "SELECT * FROM tbl7 ORDER BY id DESC LIMIT 5"
$ir = $jwdb.execSQL($sJwsv, $sSQL)
$sa = ""
for ($ix = 0; $ix -lt $jwdb.ColCount(); $ix++){ # カラム名
$sa += $jwdb.columnName($ix) + ","
}
Write-Host $sa
for ($iy = 0; $iy -lt $jwdb.RowCount(); $iy++){ # データ
$sa = $jwdb.columnText($iy, 0)
$vr = [double]$jwdb.columnText($iy, 1)
$dta = [DateTime]::FromOaDate($vr).ToString("yyyy/MM/dd HH:mm:ss")
$sa += "," + $dta + "," + $jwdb.columnText($iy, 2)
Write-Host $sa
}
$jwdb.Disconnect() # 切断
参考にした資料
JoyWatcher JWDBApi ActiveXヘルプ (東京ガス株式会社)