第9回 データベース 「5.データベース用コマンド キーモード」
|
|
9−5 データベース用コマンド キーモード
3)キーモード Key Mode このモードで取り扱うデータベースは、いわゆるカード型のデータベース風で、ノンキーモードに比べて、データの操作がしやすくなっています。 このモードでは、ノンキーモードに存在しなかった、データの更新やレコードの削除、及び、簡易な検索機能があります。 そして、このように機能が多い分、コマンド類も多くなっています。 このモードでは、ノンキーモードとは異なり、「キー」と呼ばれるものでレコードを区別します。 したがって、1つのデータベース内で同じキーが存在することはできません。(このような唯一のキーを「ユニークなキー」と言います) このモードで新規にデータを書きこむには、DbInsert()を使います。 データの書き込み DbInsert(DbName,dbKey,varList) (あ、もちろんDbOpen()で開いていなければ、処理できません。) 引数のうち、DbNameは、ノンキーモードと同じことで、開いたデータベースの変数名を指定します。 次の引数dbKeyは、キーとなるものを指定しますが、これは文字列や数字、日付など、どのような型でも指定できますが、実用的には、数値か文字列にするのが良いでしょう。 最後の、varListは、変数の羅列を表します。 キーモードでは、ノンキーモードとは異なり、1つのレコードに容量の許す限り、複数の値を格納することができます。 なので、カンマで区切って、書きこむべきデータを並べれば良いのです。 例えば、"myName" というキーレコードに、"mizuno"と"ami"を書き込むには、 res=DbInsert(DbX,"myName","mizuno","ami") とします。 これを読みこむには、DbRead()を使います。 データの読み込み DbRead(DbName,dbKey,varList) 指定する引数は、DbInsert()と同じです。 例えば、先ほどのレコードに書きこんだデータを読み取るには、
Dim A1 as string
Dim A2 as string
res=DbRead(DbX,"myName",A1,A2)
というように、同じ数だけ変数を用意します。
例では、2つの文字データを書きこんだレコードですので、2つの文字列型変数を用意しました。(ただ、この変数の数は同じにする必要はないようで、実際、少ない方なら問題がないようです。) 注意すべき点は(予想がつくことですが)変数の型を間違えないことですね。 さて、書きこんだデータレコードを修正するには、DbUpdate() を使います。 データの修正 DbUpdate(DbX,dbKey,varList) 一方、削除は、レコード単位となりますので、DbDelete()を使って、データベース名とキーを指定するだけです。 レコードの削除 DbDelete(DbX,dbKey) さて、これらの操作基準となるキーは、これだけでは、ノンキーモードのポジションの概念とそれほど変わりはありませんが、このキーモードでは、そのキーが「検索の対象」になる、という点が異なります。 DbFind()という関数を使えば、そのキーを持ったレコードがあるか否かを検索することができます。 レコードの検索 res=DbFind(DbName,DbKey) この戻り値が、レコード番号を返せば嬉しいのですが、実際は、結果コード表の値が返ってきます。 したがって、そのキーが見つかれば、結果は 0 となります。 レコード番号が返されれば便利そうですが、検索にワイルドカードなどが使えるわけではないので、これで十分なのでしょう。 このDbFind()を使えば、処理すべきデータを新規に書き込むべきか、更新すべきかチェックできますね。 例えば、 ![]() このような手順を使って、エラーの出ないデータの書き込みが可能です。 (もちろん、他にも方法はありますよ) さて、キーモードの読み込み処理では、キーを使う以外に、ノンキーモードのようなポジションの概念を使うことができます。 ただ、直接ポジションを指定するDbPosition()は使えませんので、別の方法を使います。 ノンキーモードでは、ポジションを指定すれば、そのレコード位置が処理対象になり、次のレコードを処理する場合は、ポジションを+1して再度指定します。 一方、キーモードでは、DbRead()などのキーでの処理を行った時点で、そのレコードにポジションが移ります。 そして、その次のレコードを処理するには、DbReadNext()、前のレコードを処理するには、DbReadPrev()を使います。 次のレコードを読み込む DbReadNext(DbName,dbKey,varList) 前のレコードを読み込む DbReadPrev(DbName,dbKey,varList) 基本的に、DbRead()と書式は同じです。 これらを使ってデータを読み込むと、ポジションは読み込み対象となった位置へ移動します。 例えば、DbReadNext()を実行すると、次のレコードにポジションを移動して、その後データを読み込む、といった事になります。 したがって、これらを使えば、キーを意識することなく、データを連続的に読みこむことが可能です。 しかし、ノンキーモードとは違って、存在しないレコードにポジションを移動させようとするとエラーになりますので、注意して下さい。 また、どのような順番でデータを書き込んでも、キーのアルファベット順(って言うと語弊があるか・・・)にレコードが並べ替えられることを覚えておいてください。 |
第9回 データベース 「5.データベース用コマンド キーモード」
|