« 書覚単語 Ver2.0リリース! | トップページ | フリーウェアのダウンロードサイト発見 »

2010年2月10日 (水)

書覚単語こぼれ話

昨日リリースした書覚単語ver2.0、shino-jiさんmizuno-amiさんNAS芹沢さんにご紹介頂きました。どうもありがとうございましたm(_ _)m

というわけで、アプリ公開後恒例の、こぼれ話を。

今回一番苦労したのは、実はプログラミングではありません。なぜか、単語帳のデータベースが壊れていまして、その対応で四苦八苦しました。

以下、細かい話になりますので興味ある方はどうぞ。

この書覚単語の単語帳データベースは、下記のような項目を持っています。

  • 英単語
  • 日本語訳
  • 問題番号
  • 直前の結果
  • 正答数
  • テスト回数
  • 正答率
  • 登録日

で、このデータベースのキーは、英単語になっています。(ですので、一つの単語帳に、同じ英単語を複数登録できないわけです)。例えばテストをしたときにその結果を反映するには、事前に変数に読み込んでおいた英単語をキーとしてdbupdateを実施しています。

で、今回、新たにチェックフラグというのを項目に追加するため、startupモジュールに、dbupdateで末尾にチェックフラグを追加するという処理を入れました(dbupdateでデータベース構造を変更するというのも強引ですが^^;)

ところが、なぜか直前に読み込んだ英単語をキーにdbupdateをしているはずなのに、update文がエラーで返されてしまうレコードが(私の手元の単語帳で)いくつかあることが判明。

これはなかなか深刻です。というのは、キーが壊れているので、そのデータにアクセスしようがないからです。そのレコードを削除することさえできません。もっと言えば、このレコードについては、学習結果の記録もできなくなっていたはずですが、エラーチェックをはしょっていたので全く気づきませんでした^^;

仕方がないので、ワーク用のデータベースを別に作り、現存のデータベースから1行読み込み、それをワーク用のデータベースに書き出し、一番最後に、現存のデータベースを削除して、ワーク用のデータベースの名前を現存のデータベースのそれに変更する、と言う処理に書き換えて、何とか事なきを得ました。

ちなみに、キー項目のデータがなぜ壊れていたかは謎です。今後もこの手のエラーが発生しないとは限らないので、下記の2つの処理を追加しました。

  1. 単語帳データ更新時にエラーが発生したらメッセージを出すようにした
  2. 単語帳データベースが破損していた場合、マニュアルで修復する処理を追加

ちなみに2.の機能は、トップ画面で、右上のバージョン番号を20回連続でタップすることで起動します。まあ隠し機能と言うことで^^;

で、もう一つ悩まされたバグが。というのは、先ほど「現存のデータベースを削除して」と書きましたが、この削除処理がうまくいかなくなる場合があることが判明。エラーコードを確認したところ、「データベースが開かれている」というエラーです。ですが、どう見てもdberaseの直前にちゃんとdbcloseをしていますし、dbcloseの返値を見ても正常に終了しています。

なぜだ~?とネットを調べていると、いなあもさんの2003年12月12日の日記に、同じ現象が書かれています。何でも、dbopenを同じdbに対して連続で実行すると、その後のdberaseができなくなるとのこと。なるほどなるほど、と思って目を皿のようにしてコードをチェックしていると、確かにありました!同じミス。というわけで、その部分を修正して無事リリースにこぎ着けた、というわけです。

この間Kenkyoroさんにお会いしたときにもしゃべったのですが、プログラミングスキルがほとんど無い私でも、自分が「欲しいなあ」と思うアプリを作れるのは、このNSBasicのおかげです。というわけで、まだしばらくは、クラッシックPalmを使い続ける日々は続きそうです。

|

« 書覚単語 Ver2.0リリース! | トップページ | フリーウェアのダウンロードサイト発見 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/140067/47531489

この記事へのトラックバック一覧です: 書覚単語こぼれ話:

« 書覚単語 Ver2.0リリース! | トップページ | フリーウェアのダウンロードサイト発見 »