Информационный портал по безопасности » Операционные системы » Linux » Пишем простое Windows-приложение на Tcl/Tk с использованием SQLite

 

Пишем простое Windows-приложение на Tcl/Tk с использованием SQLite

Автор: admin от 26-03-2012, 12:22, посмотрело: 3 035

Добрый день уважаемому хабрасообществу! Немного здесь информации об очень приятном и лёгком в использовании языке программирования TCL, а особенно, полезной для тех, кто только начинает с ним знакомство. Попробую внести посильный вклад в исправление столь досадного недоразумения.

Преамбула

Появилось у меня задание в институте: в качестве лабораторной работы написать небольшое приложение, оперирующее определённым количеством структурированных данных. Приложение должно запускаться под Windows, не требуя установки каких-либо интерпретаторов, баз данных, фреймворков и любого дополнительного софта. Структура данных такова, что их удобно хранить в реляционной БД. При более свободном выборе ЯП и отсутствия требования к лёгкому запуску на любом компьютере я по привычке написал бы всё на РНР+MySQL, но здесь пришлось искать другие пути.
Спросив у товарищей, кто как решает данную задачу, обнаружил, что пишут в основном на Delphi/Visual Basic с использованием csv-подобных файлов в качестве хранилища. Мне не хотелось пользоваться громоздкими системами и отказываться от SQL. И пришло озарение: а ведь я почти каждый день на работе использую TCL! После недолгих поисков информации было обнаружено, что он отлично подойдёт для решения нашей задачи.

Превращение TCL-кода в windows executable

TCL — интерпретируемый язык. Но есть средство, позволяющее создать исполняемый файл из tcl-кода: TkWrap. Оно упаковывает интерпретатор и наш исходный код в один файл, обеспечивая таким образом необходимую нам удобную переносимость.
Работать с ним очень просто:

  • Скачиваем и распаковываем TkWrap

  • В полученном архиве есть три файла, нас интересует fullwrap.exe, т.к. только он поддерживает работу с SQLite. Запускаем его: fullwrap.exe hello.tcl -o hello.exe
    hello.tcl — заранее подготовленный файл с исходным кодом, hello.exe — имя исполняемого файла, который мы получим на выходе.

  • Запускаем созданный hello.exe и любуемся результатами проделанной работы.

  • Конечно, чтобы было чем любоваться, необходимо это что-то сначала написать. Теперь о TCL-коде.

    Работаем с SQLite из TCL

    SQLite — легковесная встраиваемая реляционная база данных (цитата из Википедии). Это значит, что мы можем легко пользоваться всеми прелестями SQL без необходимости запускать какие-либо серверы баз данных. То, что нужно.
    Подробное описание работы с SQLite из TCL можно найти на официальном сайте SQLite. Приведу вольный перевод основных моментов:
    Команда sqlite3 dbcmd database-name подключает нас к базе данных 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 (конечно, она должна для этого существовать) будет создан ассоциативный массив values, содержащий значения этой строки, и выведен на экран.

    Пишем наше приложение

    Итак, пример: небольшое приложение на Tcl/Tk, позволяющее выполнить произвольный sql-запрос к базе данных ourdb.
    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, получим наше приложение:
    Пишем простое Windows-приложение на Tcl/Tk с использованием SQLite

    Ссылки

    Подробнее о TCL можно почитать здесь: http://tmml.sourceforge.net/doc/tcl/
    О создании графического интерфейса с помощью Tk: http://linux.yaroslavl.ru/docs/prog/tcltk/tk.html



    Источник: Linux

    Категория: Операционные системы / Linux

    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    • bowtiesmilelaughingblushsmileyrelaxedsmirk
      heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
      winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
      worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
      expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
      disappointedconfoundedfearfulcold_sweatperseverecrysob
      joyastonishedscreamtired_faceangryragetriumph
      sleepyyummasksunglassesdizzy_faceimpsmiling_imp
      neutral_faceno_mouthinnocent