MdbCommandで利用できるSQLデータ型について。次は、文字列です。
こんにちは。
ここで、もう一度MdbCommandについてお知らせします。
MdbCommandは、Windows PowerShellで記述されたモジュールで、mdbファイルをPowerShellで操作するためのものです。
テーブルの作成や参照などの機能のほかに、プログラミングに利用することができるようになっています。
以下で、ダウンロードできます。
GitHub
GitHub - rancomma/MdbCommand: powershell ms mdb file automation command.
- Windows PowerShellは、Windows7から標準でスタートメニューの「アクセサリ」に入っています。
- XPでも、Windowsアップデートを行うとインストールされるようです。
- インストールされていない場合は、Microsoftのサイトからダウンロード出来ます。
- モジュールは、PowerShell version2 から導入されたもので、コマンドを簡単に増やしたりできる仕組みです。
- Windows7のPowerShellのヴァージョンは、version2です。
- mdbファイルは、Office Accessデータベースに利用されてるファイルで、Office Access2003までの形式に対応しています。
- Office Access2007や、Office Access2010は、Accdbファイルになりますが、mdbファイルも利用できます。
- WindowsXPや7では、mdbファイルを操作するためのライブラリが標準で入っています。
- MdbCommandを利用するのに、Office Accessは、必須ではありません。
SQLで利用できるデータ型 文字列
それでは、SQLで利用できるデータ型の文字列についてお話します。
◆MS ACCESS:SQL データ型
http://office.microsoft.com/ja-jp/access-help/HP001032248.aspx?CTT=5&origin=HP001032229
SQLで入力するデータ型 文字列
データ型 | SQLで入力する データ型 |
対応する .NETクラス |
備考 | ||
---|---|---|---|---|---|
VARCHAR | varchar string |
[string] | 0 〜 255 バイトの文字列 | ||
CHARACTER | character char |
[string] | 0 〜 255 バイトの文字列で、文字が無いところはスペースで埋まります。 | ||
TEXT | text memo |
[string] | 0 〜 2.14 GB の文字列 |
[string]は、System.String型をあらわします。
MdbCommand をインポートします。
PS (1) > ipmo .\MdbCommand
前回作成した、testdata.mdbをオープンします。
PassThru スイッチパラメータを指定すると、オープンした結果が返ってきます。
PS (2) > Open-Mdb testdata.mdb -PassThru
結果
DatabaseName State Transaction DataSource ------------ ----- ----------- ---------- main Open No C:\scripts\ps1\testdata.mdb
前回作成したテーブルの一覧を参照します。Get-MdbTable コマンドを実行します。
PS (3) > get-mdbtable
結果
TableName TableType Description --------- --------- ----------- decdata TABLE intdata TABLE moneydata TABLE
文字列のデータ型を使ってテーブルを作成します。
PS (4) > invoke-mdb "create table strdata (varcharA string(50), charA char(50), memoA memo)"
作成したテーブルの列情報を参照します。
PS (5) > get-mdbcolumn strdata
結果
TableName Pos ColumnName DataType AliasType Size NotNull Default PKey AutoInc --------- --- ---------- -------- --------- ---- ------- ------- ---- ------- strdata 1 varcharA VARCHAR string 50 strdata 2 charA CHARACTER char 50 strdata 3 memoA TEXT memo
文字列のデータを登録します。
PS (6) > invoke-mdb "insert into strdata values ('あいう', '123', '漢字')"
テーブルの中身を見てみます。
PS (7) > invoke-mdb "select * from strdata"
結果
varcharA charA memoA -------- ----- ----- あいう 123 ... 漢字
charAの最後が「...」になっていますが、データが後ろにまだ何かあることを示しています。
あとで、何文字あるか確かめます。
対応している.NETクラスの型を調べます。
PS (8) > invoke-mdb "select * from strdata" |gm
結果
TypeName: MdbCommand.MdbRecord Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() charA NoteProperty System.String charA=123 memoA NoteProperty System.String memoA=漢字 varcharA NoteProperty System.String varcharA=あいう
すべて、System.String型です。
それぞれ、何文字あるか、SQLで調べてみます。ここでは、len関数を使っています。
PS (9) > invoke-mdb "select len(varcharA),len(charA),len(memoA) from strdata" | ft -auto
結果
Expr1000 Expr1001 Expr1002 -------- -------- -------- 3 50 2
varcharは3文字、charは50文字、memoは2文字になりました。
charAの後ろは何が入っているか調べます。
まず、SELECT文の結果を、row変数に代入して、charAの中身を見てみます。
PS (10) > $row = invoke-mdb "select * from strdata" PS (11) > "[" + $row.charA + "]"
結果
[123 ]
スペースのようです。
すぺースをアンダースコア(_)に変えてみます。
PS (12) > "[" + $row.charA + "]" -replace " ","_"
結果
[123_______________________________________________]
このような感じで、charは固定サイズ、varchar(string)は、可変サイズになっています。
memoは、255文字を超える場合に使うことになると思います。
最後にmdbファイルを閉じます。
PS (13) > close-mdb
次回は、残りのデータ型(日付やYES/NOやバイナリ)を記述します。
今日のコマンド
PS (1) > ipmo .\MdbCommand
PS (2) > Open-Mdb testdata.mdb -PassThru
PS (3) > get-mdbtable
PS (4) > invoke-mdb "create table strdata (varcharA string(50), charA char(50), memoA memo)"
PS (5) > get-mdbcolumn strdata
PS (6) > invoke-mdb "insert into strdata values ('あいう', '123', '漢字')"
PS (7) > invoke-mdb "select * from strdata"
PS (8) > invoke-mdb "select * from strdata" |gm
PS (9) > invoke-mdb "select len(varcharA),len(charA),len(memoA) from strdata" | ft -auto
PS (10) > $row = invoke-mdb "select * from strdata"
PS (11) > "[" + $row.charA + "]"
PS (12) > "[" + $row.charA + "]" -replace " ","_"
PS (13) > close-mdb