4.思ったより簡単にデータベースが使えるんなら、作ってみましょうか  その1

●プロローグ

「こんにちは〜」
「はい、こんにちは。どちら様でしょうか?」
「とある日記系のサイトを運営している○○といいます。はじめまして」
「あ、はじめまして」
「ここで、自分のためのプログラムが作れるようになる、って聞いてきたものですから……」
「あ、ええっと、そうですね。一応、自分用のアプリを自分で作ろう、なんて言っていますね。」
「よかったぁ〜。実は、お恥ずかしい話なんですが、最近、物忘れがひどくって、いざ、日記を更新しようとすると忘れてしまうんです。」
「それは大変ですね。」
「ええ。で、仕方ないから適当に埋めたりする日もあるんですけど、ふと、自分用の日記ネタ帳アプリがあれば、と思ってこうしてご相談にあがったんです。」
「メモ帳ではダメですか?」
「ちょっと役不足で、実はイメージはあるんです。」
「ほぉ、聞きましょう。」
「画面にあるのは、テキストを書き込む部分と書き込みボタンだけ、というシンプルなアプリがよいですね。で、書き込みボタンをタップすると、タップした日付と時間も記録される、っていう仕組みのアプリです。」

「具体的ですね。でも、記録したデータはどうしますか?」
「日付と時間を選べば、その時の行動が表示されるようにしたいですね。」

「なるほど。日記のネタ帳には使えそうですね。ところでプログラムの経験は?」
「お恥ずかしい話ですが、今まで、使う一方でした。しかし、最近目覚めまして、このサイトのNS Basic関連の部分を読み始めたところです。BASICという奴なら、できそうな気がしましたので。」
「了解しました。じゃ、早速、言われたようなアプリを作り始めることにしましょうか。」
「はい! 助かります……でも、どれくらい時間がかかりますか?」
「そうですね、ま、15分もあればできちゃいますよ。」
「え?! 3日とかじゃなくて?!?!」
「ええ、単純に文字列と日付と時間を記録して、これを日付と時間で取り出すだけでしょう? 実際、作るだけなら15分もあればできそうですね。」
「はぁ……」
「でも、せっかくですから、ゆっくりとお話してみましょうか? これまでのおさらいを含めて。」
「助かります。前回のを読んで、漠然とイメージだけはわかった気でいますが、細かいところがよくわからないもので……」
「ええ、承知しています。あれだけで完全に理解できれば、私のような人間は要りませんからね(笑)」
「そうなりますか……」
「ついでに、My NSBasicの入門編の総まとめにもなりますから(笑)」


●まずは下準備

「画面のイメージから考えると、最終的には、こんなデザインでよろしいでしょうか?」

「真ん中に出来事を書き込んで、ボタンをタップ。日付は選択式で選択。シンプルですが、これでよいと思います。」
「では、実際のプログラムコードのお話ですが、今回のプログラムは大きく分けると3つの部分に分けて考えることができます。」
「3つですか?」
「はい。1つは書き込みの部分、1つは選択して表示する部分ですね。」
「もう1つは?」
「全体の準備です。下準備とでも言いましょうか。作り始めは、この下準備の部分からにしましょう。」
「ちょっと質問ですが、3つの部分に分けられたのは、多分、その動作を考えてのことと思いますけど、作りはじめる順番にルールはあるんでしょうか?」
「簡単な質問のようで難しいですね(笑)。キッチリと設計図があって、それに従ったものを作り上げるのであれば、実は、どこから作ってもあまり問題はありません。ただ、今回は、漠然とした動作しかありませんから、必然的に作り始める位置が決まってしまいます。」
「必然と言いますと?」
「今回は、データベースに出来事を記録し、データベースから出来事を取り出しますよね。だったら、データベースが存在しなければ話になりませんから、ここの部分から作るのが妥当なんですよ。」

「設計図があれば……?」
「そう。設計図があって、その図面通りに作れば動きます、という完璧なモノなら、どこからでもよいんですけどね、なかなかプロのお仕事でもそういうモノにお目にかかれません。あまり、実用的ではありませんからね。」
「そういうモノなんですか?」
「ええ、仕様書と言いますけど、理屈ではこの仕様書がしっかりしていれば、まともなモノができるなんですが、現実はプログラマのレベルによって結果が大きく変わってくるんですよ。」
「へぇ、面白いですね。」
「ええ。だから、プログラマ1人月いくら、っていうのが、本当に妥当かどうか……。ま、この話はとにかく、そういう理由もありますから、下準備から作り始めることにしました。」
「はい。」
「実は、お話しながら、作っちゃったんですが、スタートアップには次のコードを入れます。」

  Dim Db as Database
  Dim res as Integer

  res=DbOpen(Db,"PHS04DB",0)

  If res=0 Then
    res=DbClose(Db)
  Else
    res=DbCreate(Db,"PHS04DB",0,"Test")
    If res<>0 Then
      MsgBox "DbCreate Error"
    End If
  End If

「速っ!」
「あまり難しくないですし、誌面の都合もありますから(笑)」
「確かに、短いですね。」
「はい。ここではデータベースファイルを用意しているだけですから、短いです。」
「空魚屋さんのコラムで、動作を順に検証しながら進めた[OPEN]ボタンですね。」
「そうです。あれを実用的にまとめるならば、この程度でよいでしょう。」
「えっと、最初にDbOpen()で、データベースを開いているんですよね?」
「そうです。ま、データベースファイルを扱う場合、どんな場合でもDbOpen()で開いておかなければなりません。言ってみれば、表紙を開くようなものでしょうか。」
「なるほど。表紙を開いておかないとデータベースが使えないんですね。」
「ええ。そして、無事に開けた場合、戻り値が 0 だった場合ですね。これは、問題なしですから、DbClose()で閉じておきます。」
「閉じないとダメですか?」
「ま、ダメじゃないですが、開いておいても意味がないですから、必要じゃなくなったら閉じておくのがベターです。表紙が開きっぱなしの本が横にあったら、ちょっと気になるでしょ?」
「うーん、強引な説明みたいですが、そういうモノなんですね。次の Else というのは、初めて見たような気がします。」
「ええ、これは、If 〜 Then とセットで使います。通常、If 〜 Thenだと、〜の部分が成り立った時だけ実行しますが、成り立たなかった時も実行したいことがありますよね。そう言う場合、Elseを使います。」
「ああ、成り立ったら閉じておいて、成り立たなかったら新たに作るんですね。」
「そうです。この If 〜 Then ● Else ▲ End If という構文の中で、●や▲の部分を「節」と呼ぶことがあるんですが、Else節の中で、DbCreate()を使ってデータベースファイルを作っています。」
「Ifを並べなくても済むんですね。Elseを使うと。」
「はい。二者択一の場合は、これを使うと便利です。」

「ちなみに、Else節の中に、更にIf〜Thenがありますね、これもよいのですか?」
「はい、If〜Then から、End Ifまでが1つのセットです。この中に別のセットを入れても大丈夫です。ただし、End Ifを忘れないでくださいね。」
「はい。ついでに、その中のIf ですが、If res<>0 Then ですよね。 res<>0 と言うのは、どういう意味ですか?」
「通常は、両辺が等しいかどうかを表すには“=”イコールを使います。逆に等しくない状態を表すには、数学的には“≠”という記号を使いますね。」
「ノット・イコールですね。私は“イコーらない”と呼びますが……」
「はは、イコーらないですか、ははは。でも、そのイコーらない記号が、半角ではありませんよね。だから、大きくも小さくもないという意味で“<>”なんです。逆の“><”でも良いと思いましたが、あまり覚えていません。」
「つまり、この場合、resが0じゃなかったら、と言うことですね。」
「そうです。データベースファイルを作る場合に、色々なエラーが考えられますが、この例では“開けなくて”“作れない”という状態は、それだけで異常事態でしょう。この“DbCreate Error”が表示されるのは結構、致命的なことだと思いますヨ。」
「じゃ、通常の状態では出ないと考えてよいですね!」
「まぁ、そうですね。」
「ところで、空魚屋さんもサラりと流されているんですが、なぜ単なるデータファイルにクリエータIDが必要なんですか?」
「鋭いですね。ま、簡単に言っておきますと、関連性のためですね。」
「関連?」
「はい。Palmでアプリを消すと、使っていたデータベースも消えるじゃないですか? また、ファイラーの中には“関連するデータベースも消しますか?”って言うのがあるでしょ?これらは全部クリエータIDをチェックしているんですよ。」
「ははぁ、そういう関連ですか。」
「逆に、これがなかったら、あるデータベースファイルを持ってきときに、何のデータベースファイルか判別できない状態ができちゃいますね。」
「あ! そうか。そうですね。関連がわからずに、アプリだけ削除し続ければ、要らないデータベースファイルが残っちゃいますね。」
「ええ、Palmのメモリはそれほど無限じゃないですから、Windowsのシステムフォルダみたいに、要らないシステムファイルばかり残しても仕方がないですね。」
「わかりました。ということは、通常は、作成するアプリケーションと同じにしておけばよいわけですね。」
「ええ、そうです。ははは、ちょっとしたコードのつもりでしたが、説明が長くなってしまいましたね。」
「いえいえ、細かなところまでわかりますし、If〜Then〜Elseっての覚えましたから、この位のペースが自分には合っていそうです。」
「そう言っていただけると、助かります。では、次回は、この続きを作ることにしましょう。」
「はい。よろしくお願いします。」



copyright(C)2002 Hacker Dude-san all rights reserved.