前文
私は研究所で仕事をしていました。一定量の構造化されたデータで動作する小さなアプリケーションを作成する実験室の仕事として。 アプリケーションは、インタープリター、データベース、フレームワーク、または追加ソフトウェアのインストールを必要とせずに、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