第9回 データベース 「3.データベース用コマンド 共通のもの」

9−3 データベース用コマンド 共通のもの

データベースに2種類のモードがありますので、これらのモードに対応毎に使えるコマンド類が異なっています。
最初に、各モードに共通のコマンドを説明して、次に個々のモードを順に説明することにしましょう。

1.データベース共通コマンド
データベースを取り扱うためには、モードに関係なく、データベースファイルがなければお話になりませんので、大抵の場合、新規に作ります。
これには、DbCreate()というコマンドを使います。

    DbCreate(DbName,FileName,CardNo,ID)

DbNameは、データベース名です。これは、具体的には、プログラム中で使用するデータベースの名前を指定しますが、これは、データベース型の変数をしてします。
データベース型の変数は、次のように宣言します。

    Dim DbX as Database

Filenameはファイル名で、PalmOS上で取り扱うファイル名を指定します。
NS Basicのハンドブックには
  「Palm命名慣習はデータベース名の後にハイフンと作成者コードが続きます。」
とありますが、ま、暫定的にアプリケーション名にハイフンとクリエータIDを続けておきましょうか。
CardNoは、メモリーカードの番号です。本体の内蔵メモリが 0 ですので、通常は、これを指定します。
そして、最後にクリエータIDです。
例えば、AmiSolというアプリは、クリエータIDが「AmiS」ですので、次のように定義してあります。
        Dim AmiDb as Database
        Dim res as Integer

        res=DbCreate(AmiDb,"AmiSolDb-Ami",0,"AmiS")
(データベースファイル名は、AmiSolDb-Amiか、うむ、さっき言った暫定的な命名の慣習からは外れていますね・・・)
この例でも示しましたが、DbCreateコマンドには戻り値がありますので、これは関数ですね。
実は、データベース関連のコマンドは、全てが戻り値を持った関数で、その実行結果などが戻り値として返されます。
これらの結果コードは以下の通りですが、私も全てのエラーに遭遇したわけではありませんので、単なるハンドブックからの引用のみとしておきます。
戻り値意味
0オペレーション成功
1オペレーション失敗
2指定したキーが見つからない(その次のキーが指定される)
513メモリーエラー
514インデックス範囲外
515無効パラメータ
516読み込み専用である
517データベースは既に開いている
518開けない
519見つからない
520間違っているカードへの記録
521不正なデータベース
522レコードは削除されている
523レコードは保管されている
524レコード・データベースではない
525リソース・データベースではない
526ROM内か無効なデータベース名
527レコードは使用中
528リソースが見つからない
529開いているデータベースがない
530無効なカテゴリー
531有効なレコードではない
532範囲外への書き込み
533検索の失敗
534書き込み用に既に開いている
535別のタスクによって開かれている
536ユニークIDが見つからない
537既に存在する
538無効なデータベース名
539データベースがプロテクトされている
540データベースがプロテクトされていない


さて、データベースファイルが存在すれば、基本的な処理手順は、次の通りになります。
  1. データベースを開く
  2. 何らかの処理をする
  3. データベースを閉じる
データベースにアクセスする場合、そのデータベースが開いていないと処理できません。したがって、まず、開く必要があります。
データベースファイルを開くには、DbOpen()を使います。

  データベースを開く
    DbOpen(DbName,FileName,CardNo)

指定する引数は、DbCreateからクリエータIDを除いたものと同じです。
データベースファイルが存在すれば、ファイル名だけでいいジャン、と思われますが、ま、文法ですので、我慢我慢。
その代わり、と言っては何ですが、閉じる DbClose()はシンプルです。

  データベースを閉じる
    DbClose(DbName)

DbOepn()もDbClose()もDbCreate()と結果コード表の中から戻り値を返します。
毎回あのコード表を調べるのは面倒ですが、正常に終われば 0 が返ってくる事だけ覚えておいても実用上は十分です。

なんらかの理由でデータベースを消したい場合、DbErase()を使います。

  データベースファイルを消す
    DbErase(DbName)

これで、指定したデータベース全体を消去します。
ただ、消す時の注意事項にちょっと不思議な点があります。
データベースを消去する際、消す対象となるデータベースが存在することはもちろんですね。で、その際、そのデータベースは、DbClose()で閉じられていなければならない、と言う事も、なんとなく理解できます。
しかし、消去すべきデータベースは、「一度でも、開かれていなければならない」とハンドブックに記載があります。
つまり、DbCreate()で作成したけれど、結局、一度も使わずに消去することはできない、ということですね。
ちょっと、不可解な注意事項だと思いませんか?

データベースの中に、いくつのレコードがあるかを調べる DbGetNoRecs()という関数です。

  レコード数を調べる
    DbGetNoRecs(DbName)

この関数が戻り値がレコードの数ですが、データベース関連のコマンドで結果コード表を使わない唯一の関数です。

データベースを処理する時、DbErase()やDbCreate()を使う場合を除くと、データベース処理対象は、1レコードずつです。
この処理対象となったレコードの事をポジションといいます。
ポジションを先頭レコードにセットするDbReset()という関数があります。

  状態をリセットする
    DbReset(DbName)

これで、データベース内のポジションが初期化され、対象レコードが先頭になります。
ポジションの話は、次に続く各モード毎の説明で、詳しく説明することにして、とりあえず、これらのコマンド類がデータベース操作時の共通関数でした。
これらの共通関数は、基本的にデータベースファイルに対する処理ですので、なんとなく共通である意味が理解できる気がします。
次は、各モード毎の説明をしたいと思います。

前へ     目次へ     次へ

第9回 データベース 「3.データベース用コマンド 共通のもの」