書覚単語こぼれ話
昨日リリースした書覚単語ver2.0、shino-jiさん、mizuno-amiさん、NAS芹沢さんにご紹介頂きました。どうもありがとうございましたm(_ _)m
というわけで、アプリ公開後恒例の、こぼれ話を。
今回一番苦労したのは、実はプログラミングではありません。なぜか、単語帳のデータベースが壊れていまして、その対応で四苦八苦しました。
以下、細かい話になりますので興味ある方はどうぞ。
この書覚単語の単語帳データベースは、下記のような項目を持っています。
- 英単語
- 日本語訳
- 問題番号
- 直前の結果
- 正答数
- テスト回数
- 正答率
- 登録日
で、このデータベースのキーは、英単語になっています。(ですので、一つの単語帳に、同じ英単語を複数登録できないわけです)。例えばテストをしたときにその結果を反映するには、事前に変数に読み込んでおいた英単語をキーとしてdbupdateを実施しています。
で、今回、新たにチェックフラグというのを項目に追加するため、startupモジュールに、dbupdateで末尾にチェックフラグを追加するという処理を入れました(dbupdateでデータベース構造を変更するというのも強引ですが^^;)
ところが、なぜか直前に読み込んだ英単語をキーにdbupdateをしているはずなのに、update文がエラーで返されてしまうレコードが(私の手元の単語帳で)いくつかあることが判明。
これはなかなか深刻です。というのは、キーが壊れているので、そのデータにアクセスしようがないからです。そのレコードを削除することさえできません。もっと言えば、このレコードについては、学習結果の記録もできなくなっていたはずですが、エラーチェックをはしょっていたので全く気づきませんでした^^;
仕方がないので、ワーク用のデータベースを別に作り、現存のデータベースから1行読み込み、それをワーク用のデータベースに書き出し、一番最後に、現存のデータベースを削除して、ワーク用のデータベースの名前を現存のデータベースのそれに変更する、と言う処理に書き換えて、何とか事なきを得ました。
ちなみに、キー項目のデータがなぜ壊れていたかは謎です。今後もこの手のエラーが発生しないとは限らないので、下記の2つの処理を追加しました。
- 単語帳データ更新時にエラーが発生したらメッセージを出すようにした
- 単語帳データベースが破損していた場合、マニュアルで修復する処理を追加
ちなみに2.の機能は、トップ画面で、右上のバージョン番号を20回連続でタップすることで起動します。まあ隠し機能と言うことで^^;
で、もう一つ悩まされたバグが。というのは、先ほど「現存のデータベースを削除して」と書きましたが、この削除処理がうまくいかなくなる場合があることが判明。エラーコードを確認したところ、「データベースが開かれている」というエラーです。ですが、どう見てもdberaseの直前にちゃんとdbcloseをしていますし、dbcloseの返値を見ても正常に終了しています。
なぜだ~?とネットを調べていると、いなあもさんの2003年12月12日の日記に、同じ現象が書かれています。何でも、dbopenを同じdbに対して連続で実行すると、その後のdberaseができなくなるとのこと。なるほどなるほど、と思って目を皿のようにしてコードをチェックしていると、確かにありました!同じミス。というわけで、その部分を修正して無事リリースにこぎ着けた、というわけです。
この間Kenkyoroさんにお会いしたときにもしゃべったのですが、プログラミングスキルがほとんど無い私でも、自分が「欲しいなあ」と思うアプリを作れるのは、このNSBasicのおかげです。というわけで、まだしばらくは、クラッシックPalmを使い続ける日々は続きそうです。
| 固定リンク
この記事へのコメントは終了しました。




コメント