Реклама
 


  •  

    SQLite для кроссплатформенной разработки в Delphi XE2

     

    Уже больше года прошло с момента публикации статьи "SQLite в Delphi 2010." Надо сказать, что рассмотренный в статье SQLiteWrapper я успешно использовал и в Delphi 2010 и в Delphi XE. Знаю, что есть ещё несколько подобных реализаций для работы с SQLite в Delphi, но почему-то этот wrapper мне понравился более всего - небольшой по размеру, удобный в использовании, простой в изучении. Что ещё для счастья нужно? Никакого паролирования мне для баз SQLite мне не требовалось поэтому использовал себе и использовал разработку Тима Андерсона (Tim Anderson). Но, как говориться, прогресс не стоит на месте и вот вышла Delphi XE2, сама SQLite вроде бы тоже несколько раз "апнулась". Соответственно, поддержка x64, FireMonkey и прочие довольно обширные нововведения в Delphi, а также обновление библиотеки SQLIte. dll внесли свои коррективы в разработку. и мой любимый враппер дал сбой. Нет, он конечно и раньше требовал, например, передачу в параметры методов исключительно AnsiString, но это, можно сказать, мелочи. А тут вдруг после сборки проекта под XE2 перестали работать некоторые методы, например FieldAs. Bind и пр. Посыпались исключения. Первым делом глянул в репозиторий, но там оказалась ревизия от февраля месяца, т. е. для XE2 не предназначенная, да и среди нововведений значился только бэкап баз данных.

    Решил немного пошерстить Сеть в поисках подходящего враппера для SQLite в Delphi XE2. И был приятно удивлен, что разработка Тима Андерсона жива, здорова и даже теперь уже "пышет" кроссплатформенностью. Правда изменились/исчезли некоторые методы, но и добавилось достаточно. Собственно эту находку я сегодня и решил представить в своем блоге.

    Итак, первым делом заходим в репозиторий на Google Code и скачиваем исходники себе на компьютер.

    Итак, что появилось в обновленной версии. Прежде всего - это поддержка Unicode. Теперь все методы работают не с AnsiString как это было в предыдущей версии, а со String, что избавляет от некоторых лишних "телодвижений" при работе с SQLite в Delphi.

    Появились типы TDate и TDateTime .

    Для класса TSQLiteDatabase :

    Добавлен метод Attach для добавления к текущему соединению нового файла базу данных (подробнее см. документацию);

    Добавлен классовый метод AddNewSupportedColumnType;

    Удален метод BindData

    Удалены несколько перегруженных методов, таких как GetTable, GetTableString, GetTableValue

    Для класса TSQLiteTable

    Добавлено свойство IsLastRow: boolean

    Удалено свойство FieldAsString и вместо него добавлено аналогичное - FieldValByNameAsString (зачем? Посмотрим ниже)

    Для класса TSQLiteUniTable

    Добавлен новый метод FindField(const AFieldName: string): TSQLiteField;

    Добавлены новые свойства FieldsVal, FieldByName, FieldByNameAsString, FieldIndex, SQL, Stmt

    Добавлен новый класс TSQLitePreparedStatement

    Добавлен новый клсс TSQLiteField

    Ну, а раз появились новые классы, методы и свойства, то их надо изучить и попробовать использовать в работе. Для примера создадим простенькую базу данных, состоящую из одной таблички и будем читать/писать данные, по возможности использую новые типы данных.

    Для создания базы данных можете выбрать любую из программ для работы с SQLite, например, рассмотренных в статье "Обзор программ для администрирования баз данных SQLite.". Я буду пользоваться бесплатной версией SQLite Expert.

    Итак, создаем новую базу данных с названием TestSQLite. db и таблицей:

    Теперь создаем новое приложение в Delphi XE2, бросаем в папку с проектом модели SQLite3 и SQLiteTable3 и библиотеку sqlite3.dll.

    Добавим на форму приложения 2 кнопки, 4 Label'а и Memo. Внешний вид приложения будет такой:

    Теперь создадим три переменные в секции private класса формы:

    На OnCreate будем подключаться к БД и получать количество строк в БД. Обработчик будет следующим:

     



  • На главную