第9回 データベース 「4.データベース用コマンド ノンキーモード」

9−4 データベース用コマンド ノンキーモード

2)ノンキーモード Nonkey Mode
このモードでアクセスする場合、データベースは、とても原始的なデータの集まりのように見えます。
要するに、データが並んでいるだけのモノですね。
データを取り出すためには、はじめから数えて、何番目に登録されいるかを指定する必要があり、この位置を「ポジション」と言います。
データベースのレコード番号は、1番上が1で、以下、2,3,4・・・と続きます。
このモードで、データを処理するために、この番号でポジションを指定します。
例えば、ポジション=3のデータを参照する場合は、

    1)3番目にポジションを移動する
    2)参照する

という手順になります。
このポジションを指定するコマンドは、DbPosition()で、書式は次の通りです。

  ポジションを指定する
    DbPosition(DbName,Position,Offset)

DbNameは、今まで通り、宣言したデータベースの変数名ですね。もちろん、DbOpen()で開かれている必要があります。
引数Positionで、ポジションを指定し、先頭レコードが 1 になります。
また、Offsetは、そのレコード内での、先頭からの位置で、先頭が 0になります。ま、これは、先頭からの文字数(バイト数)とでも理解しても良いでしょう。
Offsetの説明をするために、データを参照する関数を紹介しましょう。

  データの読み込み
    DbGet(DbName,Variable)

DbNameは、今まで通り、データベースの変数名です。
Variableはデータを読みこんだデータを代入する変数です。
例えば、次のように、3レコード目に"BasicBASIC"というデータの入ったデータベースがあるとします。

    

このデータベースに対して、
    Dim Dbx as Database    
    Dim i as Integer    
    Dim strData as String

    i=DbOpen(Dbx,"TestDb",0)

    If i=0 Then
      i=DbPosition(Dbx,3,0)
      i=DbGet(Dbx,strData)
      MsgBox strData
    End If
の処理をした場合、3レコード目の0文字目、つまり先頭にオフセットがセットされますので、結果「BasicBASIC」と表示されます。
これを、
      i=DbPosition(Dbx,3,3)
とすれば、結果は「icBASIC」となります。
このように、Offset値を使って、データの途中からでも読み取ることができ、その場合は、その位置からデータの最後までが取り出されます。

次に、データを書き込む処理ですが、これは DbPut()を使います。
  データを書き込む
    DbPut(DbName,Data)

DbNameは・・・もういいですね。
Dataは書き込むデータを指定しますが、これは、変数でも直接の値でも構いません。
この書き込み処理も、読み込み処理と同様、ポジションをセットして、書き込み処理します。
注意すべき点は、変数の型で、参照と書き込みで型が異なると、意図しない結果になります。
ま、処理の楽な文字列にすることをお奨めします。

さて、書き込んで、読み込んで、ときましたので、レコードを修正したいですね。
しかし、このモードで使用できる修正コマンドはありませんので、DbPut()で上書きするしかありません。
先ほども紹介しましたが、ノンキーモードでは、現在のレコード数より大きな位置にポジションを指定すると、空レコードが追加されますので、「そのレコードは存在しません」というエラーが出ませんね。
したがって、既にデータのあるレコードにDbPut()をすれば修正、未知のレコードにDbPut()をすれば、新規書き込みになります。
例えば、レコード番号順にデータを登録したい場合は、共通コマンドで紹介したDbGetNoRecs()を使用します。

    rec=DbGetNoRecs(Dbx)
    i=DbPosition(Dbx,rec+1,0)

とすれば、最終レコードに+1された位置に空レコードが作られて、そこにポジションが移ります。

この状態だと、どんどんレコードが増えてしまいますが、残念ながらノンキーモードでは、レコード単位でデータを削除するコマンドはありません。
ということは、このモードでは、レコードは常に増える方向にあるわけです。

このように、ノンキーモードは、データの読み込みと書き込み程度しかない単純なモードですので、使用できるコマンド数もあまりありません。
もちろん、DbGetNoRecs()の除いたコマンド類は結果コードが返される関数であることは、共通コマンド類と同じです。

前へ     目次へ     次へ

第9回 データベース 「4.データベース用コマンド ノンキーモード」