◆◇◆ Tips! ◆◇◆

データベース操作のまとめ

[Japanese Pocket C User's Page]-[Tips!]


PocketCのヘルプにWindowsCEデータベースの操作に関する記述がありましたので、まとめてみました。
ヘルプを読むときの参考、あるいは、データベースプログラムを行うときのリファレンスとして利用してください。

1.CEにおけるデータベースの考え方

1)データベースの中にレコードが存在し、レコードの中にプロパティが存在する。
2)データベース、レコード、プロパティを識別するためのオブジェクトIDがある。
3)データベースが表、レコードは行、プロパティは列のようなもの
4)同一データベース内でも、レコードによって、保有するプロパティの種類、数は異なる。
5)実際の値はプロパティ単位で保有している。
6)同一レコード内に存在するプロパティのオブジェクトIDを知らない場合は、
インデックスを利用してアクセスすることができる。

一般的なデータベースとの大きな違いは4)ですね。

また、使いたいデータのプロパティIDを知っていないと、
プロパティその意味の関連を認識することは難しそうです。

2.データベース

1)属性を参照する方法

データベースID・・・関数dbenum(int bFirst, int dbtype)で探せる
名前・・データベースIDがわかっていれば関数dbname(int oid)を使える
レコード数・・・関数dbnrecs(int oid)
データベース型・・・取れない?
データベースサイズ・・・関数dbsize(int oid)

2)操作を行う方法

オープン・・・関数dbopen(int oid, string name)。データベースIDと名前のどちらでもオープン可能
作成・・・関数dbcreate(string name, int dbtype)。戻値がデータベースIDなので、今後はこれを使ってオープンする。
削除・・・関数dbdelete(int dboid)
クローズ・・・関数dbclose()

3)データベース操作に関するポイント

・まずはオープン、最後にクローズ
・データベースIDで指定することが多い

3.レコード

1)属性を参照する方法

現在のレコードID・・・関数dbrecnow()
プロパティの数・・・関数dbrecpropcnt()

2)操作を行う方法

検索・・・関数dbseek(int seektype, int dwValue)seektypeとして選べるのは、以下の通り

削除・・・関数dbrecdel(int recoid)

3)レコード操作に関するポイント

・レコードのオブジェクトIDが重要
・実際の値はプロパティを参照すること

 

4.プロパティ

1)属性を参照する方法

プロパティID・・・とれない?
プロパティ型・・・関数dbrecproptype(int index)で取得可能(CEVT_I2、CEVT_UI2、CEVT_LPWSTR 、CEVT_I4、CEVT_UI4)
値・・・関数dbrecpropval(int index)、関数dbrecread(int proptype, int propid)
インデックス・・・なし。ただし、関数dbrecpropcnt()でプロパティの数を取得した後にループという手で代用可能

2)操作を行う方法

書き込み・・・関数dbrecwrite(int rec_oid, int prop_type, int prop_id, void prop_value)
削除・・・関数dbrecdelprop(int recoid, int proptype, int propid)

3)プロパティの操作に関するポイント

・データベース、レコードはオブジェクトID単位で操作するのに対し、
プロパティのみインデックス単位での操作となる(dbrecreadを除く)
・プロパティIDは縦に串刺しするために利用する

 

5.取得できないもの

ということは、PocketCの関数群を使って取得できないのは

・データベースのデータベース型
・プロパティのプロパティID

ですね。

データベース型は取得する必要はないと思いますが、プロパティIDを取得する方法は、
後述する「データベース内の連絡先を参照しよう」にて解説します。


[Japanese Pocket C User's Page]-[Tips!]