前文
私は研究所で仕事をしていました。一定量の構造化されたデータで動作する小さなアプリケーションを作成する実験室の仕事として。 アプリケーションは、インタープリター、データベース、フレームワーク、または追加ソフトウェアのインストールを必要とせずに、Windowsで実行する必要があります。 データ構造は、リレーショナルデータベースに保存すると便利です。 PLをより自由に選択でき、どのコンピューターでも簡単に起動できるという要件がないため、習慣からすべてをPHP + MySQLで記述しますが、ここでは他の方法を探す必要がありました。私の仲間にこの問題を解決する方法を尋ねた後、私は彼らがストレージとしてcsvのようなファイルを使用してDelphi / Visual Basicで主に書いていることがわかりました。 かさばるシステムを使用してSQLを拒否したくありませんでした。 そしてインスピレーションが生まれました:しかし、私は職場でほぼ毎日TCLを使用しています! 情報を簡単に検索したところ、問題を解決するのに最適であることがわかりました。
TCLコードをWindows実行可能ファイルに変換する
TCLはインタープリター言語です。 ただし、tclコードから実行可能ファイルTkWrapを作成できるツールがあります。 インタープリターとソースコードを1つのファイルにまとめ、必要な便利な移植性を提供します。彼との作業は非常に簡単です。
- TkWrapのダウンロードと解凍
- 結果のアーカイブには3つのファイルがあります。fullwrap.exeに興味があります。 SQLiteでの作業をサポートするのはそれだけです。 実行:
fullwrap.exe hello.tcl -o hello.exe
hello.tclは、ソースコードがあらかじめ用意されたファイルです。hello.exeは、出力で取得する実行可能ファイルの名前です。 - 作成されたhello.exeを実行し、完了した作業の結果を楽しみます。
TCLからSQLiteを操作する
SQLiteは、軽量の組み込みリレーショナルデータベースです (Wikipediaから引用)。 これは、データベースサーバーを起動することなく、SQLのすべての機能を簡単に使用できることを意味します。 必要なもの。TCLのSQLiteを使用した作業の詳細な説明は、公式のSQLite Webサイトにあります。 主なポイントの無料翻訳を提供します。
sqlite3 dbcmd database-name
コマンドは、データベース名データベースに接続します(存在しない場合は自動的に作成されます)。 dbcmdは、発明した接続識別子です。 このコマンドを実行すると、dbcmdコマンドがさまざまな方法で使用可能になります(合計で22種類あります)。 たとえば、最も人気のあるevalのみを考えます。
dbcmd eval sql ?array-name ? ?script?
このコマンドはsqlコードsqlを実行し、最後のパラメーターが省略された場合、実行結果を返します。 (フェッチするときに)行を調べるには、次のようなものを使用できます。
db1 eval {SELECT * FROM t1 ORDER BY a} values {
parray values
puts ""
}
テーブルt1の各行(もちろん、このために存在する必要があります)には、この行の値を含む値の連想配列が作成され、表示されます。
私たちはアプリケーションを書いています
したがって、例:Tcl / Tk上の小さなアプリケーションで、ourdbデータベースに対して任意のsql-requestを実行できます。proc do_query {} {
upvar query_res query_res
set ret [query [.querytext get 0.0 end]]
set query_res [lindex $ret 1]
if {[lindex $ret 0] !=0} {
.res configure -fg red ;# ,
} {
.res configure -fg black
}
}
proc query {text} { ;# sql- , (0 ) :
upvar ourdb ourdb
set errcode [catch {ourdb eval $text} ret]
return [list $errcode $ret]
}
sqlite3 ourdb ourdb;#
wm title . " SQLite"
label .query -text " ourdb:" -compound center
text .querytext -width 100 -height 6
button .execute -text " " -command {do_query}
label .restitle -text ":" -compound center
label .res -textvariable query_res -wraplength 200
button .exit -text -command exit
. configure -padx 10 -pady 10 ;#
pack .query .querytext .execute .restitle .res .exit -expand yes ;#
このコードを保存し、上記のTkWrapperを設定したら、アプリケーションを取得します。

参照資料
TCLの詳細については、 http : //tmml.sourceforge.net/doc/tcl/をご覧ください。Tkを使用したグラフィカルインターフェイスの作成について: http : //linux.yaroslavl.ru/docs/prog/tcltk/tk.html