Tech Note 21: リソースの追加と抽出

August 21, 2002

 

© NSB Corporation. All rights reserved.


[英語版]  

Contributed by Michael J. Verive, author of NS BASIC Programming for Palm OS

NSBasic for Palmは、データベース、ライブラリおよびアプリケーションをあなたのアプリケーションのPRCへリソースとして追加することができます。これらのリソースはPalm OSデバイス上で、元のデータベースへと抽出することができます。いくつかの注意点がありますので、以下で説明します。

データベース、ライブラリまたはアプリケーションをリソースとしてPRCへ追加するには、NSBasic IDEで「Add Resource」(リソースを追加)を選びます:

 

リソースが追加されるとき、NSBasicによって自動的にResource ID(この例では1004)とResource Type(デフォルトはDBIM)が与えられます:

 

注:dbCreateDatabaseFromResourceによって使われるPalm APIは、PalmのROMに収められているリソースから、サンプルデータベースをRAMへ抽出するために作られました。あなたのプログラムのPRCからデータベースを抽出する前に、その存在の確認をしておかないと、その既存のデータベース(いかなるデータの更新を含む)を上書きすることになります。以下のコードはこの問題を避ける1つの方法です:

Dim res as integer

Dim testdb as database

'now, attempt to open the database to see if it's there and available for read/write access

res=dbOpen(testdb,"PICULV-pdb",0)

If res =0 then ' it's available...

  res=dbClose(testdb) ' ...so we'll close it if we don't need to leave it open

Else ' database can't be opened for read/write access, so we'll attempt to create it from a resource

  res=dbCreateDatabaseFromResource("DBIM",1004) ' use resource type and ID from the IDE

  If res <>0 then ' can't extract it

    MsgBox "Unable to extract database"

  End If

End If


Notes

1. 一旦PRCに入ると、データベースはそれに与えられたResource ID(NSBasicによって自動的に設定)とResource Type(デフォルトはDBIM、変更可能)によって認識されます。もしResource Typeを変更する場合は、dbCreateDatabaseFromResourceステートメントで使用されるResource Typeも変更することを忘れないで下さい。

2. リソースの最大サイズは64KBですので、これより大きいサイズのデータベース、ライブラリまたはアプリケーションは、リソースとしてアプリケーションに含めることができません。

3. dbCreateDatabaseFromResourceを使うときは、特に注意を払って下さい。誤って簡単に既存のデータベースを書き替えてしまいます。例えば、あなたのアプリケーションにサンプルデータベース(MemoPadにあるようなヒントを与えてくれるもの等)を追加したい場合、もしあなたのアプリケーションが起動ごとに「sample」データベースを抽出すると、ユーザによって更新されたものは消されてしまいます。データベースを毎回上書きしたい場合を除いては、上記で示したコードのように、既にデータベースが存在するかを確認すべきです。データベースが存在して、上書きをしたくない場合、dbCreateDatabaseFromResourceステートメントをスキップして下さい。

4. 共有ライブラリをPRCへ含める場合、LoadLibraryでライブラリを読み込む前に、dbCreateDatabaseFromResourceを使ってライブラリを抽出する必要があります。

5. 上記3と同様、共有ライブラリをアプリケーションと共に組み合わせるには特に注意を払って下さい。特に、NSBから提供されているような、他のアプリケーションでも使用されるライブラリの場合は要注意です。リソースとして共有ライブラリの初期バージョンを読み込み、より新しい同じライブラリがインストールされているデバイス上で抽出すると、新しいバージョンは古いバージョンによって書き替えられてしまいます。現在dbCreateDatabaseFromResourceステートメントおよびそれに使われているAPIには、バージョンを確認する機能は付いていません。

6. リソースからデータベースを作成しても、PRCからそのリソースを取り除きませんので、別にリソースを配付するのに比べると、2倍のメモリー量が必要になります。ユーザのメモリーサイズが小さい場合、特に大きなリソースやまたは小さくても数が多いものは、このことに注意してください。

dbCreateDatabaseFromResourceはあなたのアプリケーションを配付(およびユーザ間のビーム)するにはとてもパワフルなツールです。しかしdbCreateDatabaseFromResourceを使う前に、これによって生じる全ての結果を必ず理解して下さい。