第9回 データベース 「6.Palmに名前を覚えてもらおう その1」

9−6 Palmに名前を覚えてもらおう その1

一通り、データベースコマンドを見てきたところで、サンプルを作ってみましょう。
内容は簡単です、Palmに名前を入力すると、その名前を記憶しておいてくれて、起動すると、名前を表示してくれるだけのアプリです。
簡単すぎ?ま、入門用ですからネ。

最初にプログラムの仕様を決めましょう。
  • アプリケーションを起動すると、名前データがあれば「Welcome! ○○」と表示する。なければ、名前入力を求める。
  • 「○○」の部分は、登録・変更することができる。
一見簡単そうですね。
これを元に、おおまかなフローチャートを考えてみました。

    

仕様と比べると、なんだか難しそうですね。
そう、表に見える部分はとても単純そうですが、データベースを使うと内部的には複雑になります。
これは、データベースを取り扱う場合は仕方がないことで、例えば、データベースの有無をチェックする必要がありますし、また、必要なレコードがあるかないかをチェックしなければなりません。
もし、これらの処理を怠って、データベースがないのに、開こうとしたり、書きこもうとすると、最悪の場合、システムが落ちてしまいます。
ということで、多少複雑になるわけですね。(ま、パームなら、リセットするだけですけどね。)

では、これを順にプログラムにしていきましょう。

まず、最初の部分ですが、まず、Starup()でデータベースファイルを作成します。
なぜなら、その次に、データベースから名前を読み込みますので、それまでにデータベースが存在しなければならないからです。
でも、次のデータベースチェック時に作っても遅くないジャン、と思われるかもしれません。
確かに、それでも良いでしょう。
ただ、次の部分は、FormのAfter()に記述する予定で、フォームがRedrawされると、何度も実行される可能性のある部分ですので、この中に余分な処理を置くよりも、この中には既に「データベースが存在する」という前提で作った方がスッキリすると判断し、分けて設計しました。
したがって、Startup()では、データベースの有無をチェックして、なければ作っておく、という処理を置くことにしましょう。
今回のサンプルは、BASIC講座第9回のサンプルなので、クリエータIDはBasic講座のTestの9番目、と言うことで、TeB9としました。 したがって、データベース名は、"SampleB09-TeB9"です。もし、クリエータIDがかぶったらゴメンナサイ。
    Dim Dbx as Database
    Dim res as Integer

    res=DbOpen(Dbx,"SampleB09-TeB9",0)
これで開きます。
もし、何らかの理由で開かなかった場合(大抵は最初にアプリケーションを起動してデータベースが存在しない時です)、戻り値 resが 0以外になりますので、この時はデータベースがないものと見なし、データべースを新規作成しておきます。
あった場合は、そのまま閉じておきます。
    If res<>0 Then
      res=DbCreate(Dbx,"SampleB09-TeB9",0,"TeB9")
    Else
      res=DbClose(Dbx)
    End if
ここで、注意するのは、DbCreate()がデータベースファイルを作るだけ、と言うことです。
DbCreate()でデータベースが作られた後は、開かれている状態ではありませんので、それを閉じる必要はありません。
まず、Startup()は、このくらいで良いでしょう。

さて、続けて、データベースから名前を読み取りましょう。
今回は、取り扱いの安定しているキーモードのデータベースとして、"username"というキーのレコードに名前を登録するようにしました。
なので、もし、"username"というキーがあれば、読みとって表示、なければ、名前の登録画面を開くようにしました。
まずは、開いて、"username"というキーのデータを読み取ります。
    Dim Dbx as Database
    Dim res as Integer
    Dim sName as String
    
    res=DbOpen(Dbx,"SampleB09-TeB9",0)
    res=DbRead(DbX,"username",sName)
この時点で、既に、データベースは存在している「はず」ですので、開く時のエラー処理は、ま、要らないでしょう(甘いか?)
で、DbRead()で読み取った結果、res=0 の時は正常ですから画面に表示し、なければ、名前登録の画面に移ります。
    If res=0 Then
      DrawChars "welcome! "+sName,20,50
      res=DbClose(Dbx)
    Else
      res=DbClose(Dbx)
      NextScreen "Form1006"
    End If
名前を表示する際、その長さが未知数ですので、画面上に直接描画するDrawCharsコマンドを使いました。今回の用途には十分ですからね。
そして、名前を表示したら、データベースは必要ありませんので、閉じておきます。

一方、読み取れなかった時はデータがない時、と見なしてもう1つの画面に移ります。
NS Basicでは複数のフォームを使うことができ、作成時、IDE画面から「Add Form」で新しいフォームが追加できます。
これらの複数のフォームをプログラム中から切り替えて使うには、NextScreenコマンドを使います。

    NextScreen FormName

これで、そのフォームが開きます。
注意するのは、ローカルで宣言してある変数類は、一切保存されないことです。
そう、スコープってヤツですね(忘れた人は、第2回 変数を使う、を参照のこと!)
したがって、各フォーム間で共通で利用したい値がある場合、Global定義するか、データベースを利用します。
今回は、名前の登録と読み込みだけですので、後者の方法ですね。


前へ     目次へ     次へ

第9回 データベース 「6.Palmに名前を覚えてもらおう その1」