Tech Note 25: Palm OS データベースへのアクセスAugust 16, 2005© NS BASIC Corporation. All rights reserved. / translated by mizuno-ami. |
はじめに オブジェクト 索引・クイックリファレンス オブジェクトとコレクション 関数 メソッド プロパティ
PalmDBオートメーションコントロール(PalmDB.dll)は、Palmオーガナイザー、Treoシリーズやその他多くのPalmデバイスによって作られる「PalmOS データベースファイル」へのフルアクセスを可能にするCOMコンポーネントです。それら拡張子が「.pdb」のファイルは、HotSyncによって、パソコン上にバックアップされるバイナリーイメージを含むデータベースです。
PalmDBは、数年前、Maxime Labelleによって作られました。それは、積極的にメンテナンスされおり、適切に動作し、ソースコードがフリーで公開されていますが、もし、何らかの改良・改善点を望むのなら、こちらまで連絡を下さい。
PalmDBオートメーションコントロール(PalmDB.dll)を使うには、NS Basicプログラムが動作しているコンピュータに、それらがコピーされている事が必要です。 これは単独のActiceXコントロールなので、NS Basic/Desktopのプログラムの中には組み込まれておらず、利用するパソコンのOSに個別に登録をしなければなりません。 ただし、NS Basic/Desktopのインストーラには含まれているので、開発者の方は、開発用のパソコンで使用する場合は、特に作業をする必要はありません。
NS Basicプログラムで、このコントロールを使うには、次のような宣言をします。
AddObject "PalmDB.Database", "PalmDB"
(当然ですが)このコントロールがプログラム中使われる前に、この宣言をしておく必要があります。
上記の宣言文では「PalmDB
」の名前を使いましたが、これはどのような名前を付けても大丈夫です(本書では「PalmDB」で記述します)
1つのインスタンスは1つのデータベースしか開く事が出来ません。そのため、複数のデータベースを取り扱う場合は、適宜、AddObject
にってコントロールを追加してください。
NS Basic/Desktopには、PalmDatabaseと呼ばれるサンプルプログラムが付加されていますが、これはNS Basic/Palmに同梱されるKeyedDBDemoによって作られるkeydbtext.pdbとデータを共有しています。
もし、これらのコントロールを使う場合、NS Basic/Desktop Ver.1.2かそれ以降のバージョンが必要になります。
PalmDBコントロールは、以下のオブジェクトとコレクションを持っています:
オブジェクト | 説明 |
---|---|
Database | Databaseオブジェクトは、最高位にあるオブジェクトで、これを使って直接クライアントアプリケーションからPDBファイルを作ることが出来ます。 PalmDB を使ってこのオブジェクトを参照してください。 |
ApplicationInfo | 各々のPalmOSデータベースは、ユーザー定義のアプリケーション情報を持つことが出来ます。それは、通常上、データベースのカテゴリーを含んでいます。PalmDB.ApplicationInfo で、このオブジェクトを参照してください。 |
Records | Recordsコレクションは、データベースのレコードに対し、ランダムアクセスもしくは、シーケンシャルアクセスを提供します。また、レコードの追加や削除もサポートしています。 Use PalmDB.Record で、このコレクションを参照してください。 |
Record | このオブジェクトは、各レコードを表します。個々のレコードを管理するためのメソッドや関数が提供されています。PalmDB.Records(レコード番号) で、個々のレコードを参照します。レコード番号は 0番から始まり、最終レコードは PalmDB.Records.Count - 1 で表現されます。 |
オブジェクトとコレクション | |
ApplicationInfo (object) | ApplicationInfo |
Database (object) | Database |
Record (object) | Record |
Records (collection) | Records |
関数 | |
Count (function) | object.Count |
GetDateField (function) | object.GetDateField(Offset) |
GetStringField (funtion) | object.GetStringField([Offset = 0]) |
GetValueField (function) | object.GetValueField(Offset, Length) |
Item (function) | object[.Item](Index) |
メソッド | |
Add (method) | object.Add(Index) |
CategoryInitialize (method) | object.CategoryInitialize |
Load (method) | object.Load(Filename) |
PutDateField (method) | object.PutDateField(Value, Offset) |
PutStringField (method) | object.PutStringField(Value, [Offset]) |
PutValueField (method) | object.PutValueField(Value, Offset, Length)
|
Remove (method) | object.Remove(Index) |
Save (method) | object.Save(Filename) |
プロパティ | |
ApplicationInfo (property) | object.ApplicationInfo |
Attributes (property) | object.Attributes [= Value] |
Category (property - Record object) | object.Category [= Value] |
Category (property - ApplicationInfo object) | object.Category(Index) [= Value] |
CreationDate (property) | object.CreationDate |
Creator (property) | object.Creator [= Value] |
ModificationDate | object.ModificationDate |
Name (property) | object.Name [= Value] |
Records (property) | object.Records |
Size (property) | object.Size [= Value] |
Type (property) | object.Type [= Value] |
ApplicationInfoオブジェクトは、ユーザ定義のアプリケーション情報を含んでいます。
ここには、データベースカテゴリが含まれています。
ApplicationInfo
アプリケーション情報のエリアに任意のデータを置く機能は実装されていません。
そのため、Recordオブジェクトのように多くのメソッドや関数を持っていません。
このオブジェクトは、直接作ることが出来ませんので、代わりにDatabaseオブジェクトのApplicationInfoプロパティを使います。
Databaseオブジェクトは、最高位にあるオブジェクトで、直接、クライアントアプリケーションから作ることが出来ます。それは、.pdbファイルの事です。
Database
「インストールと使用方法」で説明したように、AddObject
命令を使ってデータベースオブジェクトを作ってください。
Recordオブジェクトは、データベース中の各レコードを表します。個々のフィールドデータを管理するために、多用なメソッドと関数を持っています。
Record
直接、このオブジェクトを作ることは出来ません。Records コレクションのメソッドと関数を使用してください。
Recordsコレクションは、データベースのレコードに対し、ランダムアクセスとシーケンシャルアクセスの両方を提供します。また、レコードの追加や削除もサポートされています。
Records
Recordsオブジェクトは、データベース内の各レコードを列挙する事を考え、NS Basic/Desktopの For Each 構造をサポートしています。
このオブジェクトは、直接作ることが出来ません。代わりに、DatabaseオブジェクトのRecords プロパティを使ってください。
対象:Records
object.Count
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
対象:Record
object.GetDateField(Offset)GetDateField関数は、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Offset | レコードデータの先頭からのオフセット値。先頭は 0から始まります。 |
この関数は、PalmOSが扱う4バイトの整数で表される標準の日付型データに対して機能します。これらは、NS Basic/Palmが扱う8バイト実数の日付型、(Year-1900)*10000 + month*100+ day、とは異なります。
対象:Record
object.GetStringField([Offset = 0])GetStringField 関数は、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Offset | レコードデータの先頭からのオフセット値。先頭は 0から始まります。 |
この関数は、オフセット値で指定された位置から、レコードデータの最後までの文字列を取得できます。これは記録されているバイナリデータを取り出すのに役立ちます。 文字列データとして取り出す場合は、次のようなコードでデータを整えてください:
s = PalmDB.Record(0).GetStringField(37)
s = Left(s, Instr(s, chr(0)) - 1)
対象:Record
object.GetValueField(Offset, Length)GetValueField 関数は、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Offset | レコードデータの先頭からのオフセット値。先頭は 0から始まります。 |
Length | 取り出したい数値データの長さ。 バイト(Byte)=1、整数(Integer)=2、長整数(Long)=4 |
対象:Record
object[.Item](Index)Item 関数は、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Index | 有効なレコード番号を表すインデックス。範囲は 0 - Count |
対象:Records
object.Add(Index)Add メソッドは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Index | 新しいレコード番号を表す 0から始まるインデックス番号。レコードは、Indexで示された位置に挿入され、IndexとCountが等しい時は、最終位置への追加になります。 |
object.CategoryInitializeCategoryInitialize メソッドは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
CategoryInitializeメソッドはUnfiled
、Business
、およびPersonal
の初期のカテゴリを作成します。
対象:Database
object.Load(Filename)Load メソッドは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Filename | 読み込みたい.pdbファイルのフルパス |
対象:Record
object.PutDateField(Value, Offset)PutDateField メソッドは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Value | 保存したい日付を表す数値データ |
Offset | レコードデータの先頭からのオフセット値。先頭は 0から始まります |
このメソッドは、PalmOSが扱う4バイトの整数で表される標準の日付型データ(特定の期日からの経過秒)を取り扱います。これらは、NS Basic/Palmが扱う8バイト実数の日付型、(Year-1900)*10000 + month*100+ day、とは異なります。
対象:Record
object.PutStringField(Value, [Offset])PutStringField メソッドは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Value | 保存したい文字列データ |
Offset | レコードデータの先頭からのオフセット値。先頭は 0から始まりす |
対象:Record
object.PutValueField(Value, Offset, Length)PutValueField メソッドは、次の項目を含みます:
Item | Meaning |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Value | 保存したい数値データ。Lengthによって適切なデータ長を指定してください。 |
Offset | レコードデータの先頭からのオフセット値。先頭は 0から始まります |
Length | 数値データの長さ。バイト(Byte)=1、整数(Integer)=2、長整数(Long)=4 |
対象:Records
object.Remove(Index)Remove メソッドは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Index | 削除したいレコードを表すインデックス番号。指定できる範囲は、0 - (Count - 1)(最終レコード) |
対象:Database
object.Save(Filename)Save メソッドは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Filename | 保存したい.pdbファイルのフルパス |
対象:Database
object.ApplicationInfoApplicationInfo プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
object.Attributes [= Value]Attributes プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Value | 設定する属性を表す数値データ。以下のDatabase Attributes やRecord Attributes を使ってマスクを指定できます。 |
名前 | 意味 |
---|---|
dmHdrAttrResDB | |
dmHdrAttrReadOnly | |
dmHdrAttrAppInfoDirty | |
dmHdrAttrBackup | |
dmHdrAttrOKToInstallNewer | |
dmHdrAttrResetAfterInstall | |
dmHdrAttrCopyPrevention | |
dmHdrAttrStream | |
dmHdrAttrHidden | |
dmHdrAttrLaunchableData | |
dmHdrAttrOpen | |
dmAllHdrAttrs |
名前 | 意味 |
---|---|
dmRecAttrSecret | |
dmRecAttrBusy | |
dmRecAttrDirty | |
dmRecAttrDelete | |
dmAllRecAttrs |
名前 | 意味 |
---|---|
dmRecAttrCategoryMask |
対象:Record
object.Category [= Value]Category プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Value | 0 - 15 の範囲の数値 |
object.Category(Index) [= Value]Category プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Index | 0 - 15 の範囲の数値 |
Value | 指定されたカテゴリに保存される文字列 |
対象:Database
object.CreationDateCreationDate プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
対象:Database
object.Creator [= Value]Creator プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Value | データベースファイルが持つ4文字のクリエータID。 有効なクリエータIDは、大文字のみ、もしくは大文字・小文字が混在した文字列で、全て小文字のものはPalmによって予約されています。 |
対象:Database
object.ModificationDateModificationDate プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
対象:Database
object.Name [= Value]Name プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Value | データベース名を表す文字列 |
対象:Database
object.RecordsRecords プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
object.Size [= Value]The Size プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Value | オブジェクトの新しいサイズ。 オリジナルのオブジェクトの内容は可能な限り保持されます。もし、新しいサイズが従来のサイズよりも大きい場合、そのオブジェクトは切り詰められます。 |
対象:Database
object.Type [= Value]Type プロパティは、次の項目を含みます:
項目 | 意味 |
---|---|
object | 対象リスト内のオブジェクトを表す式 |
Value | データベースのタイプを表す4文字の文字列。 有効なタイプは、小文字のみ、もしくは大文字・小文字が混在した文字列で、全て大文字のものはPalmによって予約されています。 |
このコントロールは、データベースファイルを扱う事を前提としています。従って、タイプにはデータベースを表す「data」を使うのが適切です。