3

Sqliteデータベースから読み取るTclアプリケーションを構築しようとしています。アプリケーションのスターキットを作成し、.vfsフォルダー内の.tclファイルの横にSqliteデータベースファイルを配置してアプリケーション(.exe)を実行しようとすると、「実行中にパッケージsqlite3が見つかりません」というエラーが表示されます。パッケージにはsqlite3"が必要です。

アプリケーションがデータベースファイルを見つけることができないと思います。スターキットをビルドする前に、.tclアプリケーションはSqliteデータベースを読み取ることができますが、スターキットを作成した後、.tclファイルでエラーが発生します。

TclアプリケーションのスターキットがSqliteデータベースファイルを読み取れるようにする方法を知っている人はいますか?

ありがとう、

DFM

4

3 に答える 3

5

スターキットが sqlite3 パッケージを読み込めない可能性が高いと思います。.vfs フォルダに lib ディレクトリを作成し、そこに sqlite3 パッケージをコピーしましたか?

于 2009-09-17T07:45:26.303 に答える
4

質問で2つの異なることについて話し合っているようです。

1 つ目は、sqllite3 ライブラリをロードする機能です。Jackson が指摘したように、スターパックの lib ディレクトリに sqllite3 ライブラリ (tcl および付随するファイル) を含める必要があります。それが正しく行われると、「package required sqlite3」コマンドが正しく機能するはずです。

2 つ目は、-writableフラグに関するものです。私の理解が正しければ、実行中にスターパック内のファイルを変更することができます。starpack に含まれるライブラリをロードする機能とは関係ありませんが、そのライブラリがファイル (あなたが話したデータベース ファイルなど) を変更できるようにするために使用されます。

特定の OS の制約により、実行中のスターキット (内のファイル) に書き込むことができないという印象を受けました。そうは言っても、Brent Welch の素晴らしい本「Tcl と Tk での実用的なプログラミング」から次の情報を見つけました。

write.kitファイルを複数回実行すると、実行間で write.kit/data.new ファイルが保持されないことに気付くでしょう。これは、デフォルトで Metakit データベースがメイン メモリで変更され、Starkit ファイルに書き出されないためです。ファイルを長期間保存する場合は、sdx に-writableフラグを使用します。

sdx wrap write.kit writable

参考:Google ブックス

于 2009-09-17T13:28:22.167 に答える
2

私の質問に回答してくれたすべての人の助けといくつかの徹底的な調査により、Tcl アプリを Sqlite バックエンドでラップするスターパックを作成する手順を見つけました。starpack を作成する手順は次のとおりです。

  1. ダウンロードしてフォルダに配置しtclkit-win32.upx.exesdx.kit.

  2. のコピーを作成しtclkit-win32.upx.exe、名前を変更しtclkit.exeます (同じフォルダーに残します)。

  3. .tcl( test.tcl) アプリケーションをフォルダーに追加します (コードが含まれていることを確認してくださいpackage require sqlite

  4. ファイルを実行し、tclkit-win32.upx.exe1 行ごとに次のように入力します (完了したら閉じないでください)。

    source sdx.kit
    package require sdx
    sdx::sdx qwrap test.tcl
    sdx::sdx unwrap test.kit
    
  5. tclsqlite3.dllsqlite の Web サイトからダウンロードして、別のフォルダーに配置します。フォルダに名前を付けますsqlite

  6. メモ帳などのテキスト アプリを使用して、次のコードを追加します。

    package ifneeded sqlite 3.6.18 [list load [file join $dir tclsqlite3.dll]].
    

    名前を付けて保存pkgIndex.tclし、.sqlite フォルダーに配置しますtclsqlite3.dll

  7. ステップ 1 で最初のフォルダーに移動します。.vfs フォルダーが表示されます。.vfs フォルダーを開き、次に lib フォルダーを開きます。sqlite フォルダーを lib フォルダーに配置します。lib フォルダーには、app-test フォルダー (に対応test.tcl) と sqlite フォルダーが必要です。

    手順 5 ~ 7 の代わりに、sqlite dll を含むフォルダーを C:\ の tcl フォルダーから lib フォルダーにコピーします。を使用して、dll のパスを確認できます。

      package ifneeded sqlite3 [package require sqlite3]
    

    sqlite フォルダーには、dll ファイルとpkgIndex.tcl. このようにする場合はpackage require sqlite3、ステップ 3 で使用する必要があります。

  8. 実行中のtclkit-win32.upx.exeまま、次のコードを入力します。

    sdx::sdx wrap test.exe -runtime tclkit.exe
    
  9. 最後に、新しく作成したアプリケーション .exe (test.exe) の隣に sqlite .db ファイルを配置し、アプリを実行します。

バージョンの競合に注意してください。package require sqliteコード スニペットに大きな問題がありました。もともと、私は持っていましたがpackage require sqlite3、機能していませんでした。また、pkgIndex.tclファイルを作成するときは、正しいバージョンの sqlite (3.2.18 など) を使用していることを確認してください。

皆様のご協力に感謝いたします。

DFM

于 2009-09-17T22:48:56.930 に答える