第9回 データベース 「8.おまけ」

9−8 おまけ

今回は、データベースの使い方を簡単なサンプルでみてきました。
とりあえず、色々触ってみることが一番です。
内容的には、十分プログラミングできると思いますので、後はアイディア勝負です。

と、ここまで初心者入門は終わりですが、今回は、ちょっとオマケ付きです。
本稿を執筆するにあたって、データベースについて試したことが幾つかありますので、ここで紹介しておきます。
Basic BASICと直接関係ないかもしれませんが、よろしければ、続けて読んで下さい。


【おまけ編:異なるモードのデータベースを読む】

キーモードのデータベースのイメージは、

    KEY001,ABC,DEF

と言うように、1つのレコードに、キーとデータが並んでいるイメージになります。
一方、ノンキーモードで書きこんだデータは、

    X01234567890

のように1レコード中に1つのデータが置いてあるようにイメージすることができます。
これらのデータを読み取る時に、キーモードであれば、DbRead()を使い、ノンキーモードでは、DbGet()を使いますね。
この時、DbRead()は、キーを指定してデータを読み取り、DbGet()はポジションとオフセット値を指定してデータを読み取ります。
では、これらのコマンドを別のモードのデータベースに対して使った場合どうなるのでしょう?
実は、幾つか試してみたのですが、まともに使えるお話は「キーモードのデータベースをノンキーモードで読み取った場合」でしたので紹介しておきます。
あとは、サンプル等作成しながら研究して下さい。

●キーモードのデータベースをノンキーモードで読み取る

このモードを知るためには、次のサンプルレコードを使って説明します。取り扱いが便利でわかりやすいので、全て文字列型のデータです。

    KEY001,ABC,DEF

コマンドだと、

    res=DbInsert(Dbx,"KEY001","ABC","DEF")

ですね。
DbGet()でデータを参照する時、必要な情報はポジションとオフセット値で、そのうちのポジションは単なるレコード番号です。
したがって、この情報は、あまり重要ではないと思われます。問題は、オフセット値、と呼ばれるものです。
オフセット値は、いわば、先頭からのバイト数です。簡単に言えば文字数で、先頭が 0 でしたね。
では、このデータをDbGet()で読み取ってみましょう。

オフセット値参照結果
0KEY001
1EY001
2Y001
3001
401
51
6(なし)
7ABC
8BC
9C
10(なし)
11DEF
12EF
13F

このような結果となりました。このことから、次のような事が推測されるますね。
  • キーモードの「キー」も「データ」も関係なく読み取ることができる
  • 指定したオフセット値の位置から、そのキーもしくはデータの最後まで読み取られる
  • 各データの間には、何らかの区切りがある
ということは、データベース全体で、オフセット値が 0 のデータを読み込めば、このデータベースのキー一覧を作ることも可能ですね。
また、オフセットが 0以外の時は、データのどこを読んでいるのかわからないので、読み込みに関しては、ちょっと危険です。

一方、その逆の、DbPut()を使って、キーモードのキーを作成することですが、これも可能でした。これも、オフセット 0 にすれば可能です。
しかし、ノンキーモードでは、データの重複が可能ですが、キーモードではキーの重複ができませんので、こういう処理をすると思わぬ動作を起す可能性があります。特に、表面上エラーが出なくても、内部的に問題を抱えていることがありますので、できれば、使わないようにしましょう。

今回は、おまけとして、ちょっとしたお話を載せておきました。とりあえず、データベース関連については、これくらい知っておけば良いでしょう。
内容的には、入門講座から離れてしまったかもしれませんが、いずれ役に立つことを祈って、今回は、ここまでとしておきます。
尚、探求心旺盛なユーザーのために、Palmデバイス標準のアプリケーションのデータベース名を掲載しておきます。
(これは、現在休筆中のNS Basic界の貴公子、おぢーさんのサイトより転載させていただきました。ありがとうございました。)

アプリケーション名データベース名
メモ帳MemoDB
アドレス帳AddressDB
支払いメモExpenseDB
予定表DatebookDB
メールMailDB
ToDoToDoDB


前へ     目次へ

第9回 データベース 「8.おまけ」