◆◇◆ Tips! ◆◇◆

データベース内の連絡先を参照しよう

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


データベースへのアクセスの方法は、データベース操作のまとめにて簡単に説明しました。
そこで、ここではデータベース内に存在する連絡先の内容を参照する方法をまとめました。

※ここで記載されている内容は、あくまで私(まつし)個人が解析した結果を元にしております。
MSなどの公式ドキュメントを見ているわけではないので、ここに書かれた内容が元で、
データの破損、システム障害が発生しても、なんら保証は一切いたしませんので、
あらかじめご了承願います。

1.前提条件・・・プロパティの特定

連絡先の内容を参照するためには、するためには、次の2点を特定する必要があります。

・データベースを特定することと
・プロパティを特定すること

連絡先のデータベースは"Contacts Database"という名前になっています。
プロパティidがわかっていれば、関数dbrecreadを使うことにより、特定のプロパティidを知る事が出来ます。

これを調べるために、CEDBViewなるツールを利用しました。

このツールを利用すると、database内のプロパティidとデータ型を知る事が出来ます。
ただし・・・SH3しか公開されていないようです。残念。
データベースを特定すると、左側にレコードid、右側にプロパティidとその値を表示します。
このとき、16進数8桁で表示されているPropertyという項目の下4桁がそのプロパティのデータ型、
上4桁がプロパティidを現わしているようです。

この法則が分かれば、連絡先以外のデータベースの中身もPocketCで参照することが出来ます。

2.実際に使うために・・・ヘッダー公開!

1で示した方法を元に、プロパティidと項目の対応を書いたヘッダーを作りました。
勝手にdlして試して見てください。私の利用しているA-60&Presario213で確認しましたが、
もしかすると、CEのバージョンなどにより変わっているかも知れません。

連絡先ヘッダー(contact.h)

defineに説明をつけたので、なんとなく何を現わしているか分かると思います。

3.注意事項

でも、ちょっとだけ注意。

1)データ型について

PocketCでサポート対象外となっているプロパティ型については、
扱いに気をつけましょう。

(PocketCでサポート対象外のプロパティ型)
CEVT_FILETIME 0x0040
CEVT_BLOB 0x0041

一応、dbrecreadで読むことは可能なようです。
(恐らくPocketCお得意の自動データ型変換が働いているんでしょう)
CEVT_FILETIMEは年月時間を現わしているので、
カレンダーに関連したアプリを開発する場合は、注意が必要そうです。

2)dbrecreadの扱い

未確認ではありますが、存在しないプロパティidを指定すると、
dbrecreadが強制終了してしまうようです。
(おいおい、それじゃあ、つかえないじゃんかい・・・・)

4.サンプルプログラム

解説はしませんけど、簡単なサンプルを載せます。
連絡先に書かれた氏名をレコードidとともに順次表示するものです。

サンプルプログラム(contactdb.pc)

このサンプルプログラムを見て、私が作ったヘッダーの使い方を覚えてください。

5.みなさんにお願い

最初にも書きましたが、この内容はあくまで私(まつし)が解析したものです。
もし、CEのデータベースに関するいい情報があるとか、
ご自分で解析した結果を公開してもいいよって人がいましたら、
ぜひBBSあるいは私まつしに直接メールにてその旨を御伝え願います。


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