SQLite. C++Builder 2006

Аватар пользователя
Администратор
Сообщений: 157
Зарегистрирован: 27 фев 2011, 17:40
Откуда: откуда и все :)
СообщениеДобавлено: 07 июл 2016, 14:38
SQLite - очень мощный и одновременно удобный инструмент для разного типа задач по хранению и обработке данных.
Более подробное описание не входит в данную тему и его можно почитать тут
Приведенные ниже примеры взяты с работающего проекта.

Скачать версию используемую мной.
SQLite.zip
SQLite
(1.81 MiB) Скачиваний: 30


В данной теме коснусь использования инструмента в своих проектах.

Подключение к проекту и подключение к базе.

    Кладем каталог из архива (SQLite) в каталог проекта.
    Регистрируем каталог с файлами SQLite в список каталогов "Include path". (Ctrl+Shift+F11 или Project - Options)
    Затем добавляем строки в заголовочные файлы
    Код: выделить все
    #include <sqlite3.h>
    необходимых юнитов.
    Я делаю приватную переменную в заголовочном файле.
    Код: выделить все
    private:   // User declarations
       // SQLite database variables
       sqlite3 *db;
    int rc; // в дальнейшем используется для получения и анализа результата подключения к базе



Создание базы данных со своей структурой таблиц.
    Код: выделить все
    rc = sqlite3_open("data.db", &db); // Пытаемся открыть файл базы.
    if(rc > 0)
       { // возможно у нас не хватает прав на создание файла. Вываливаемся.
       Status("Не удаётся открыть БД: "+AnsiString(sqlite3_errmsg(db)));
       sqlite3_close(db);
       return;
       }
    else
       {
       Status("База данных [data.db] открыта"); // Здесь у меня передается в статус панель состояние подключения
        db_opened = true; // Запомним, что базу мы открыли.
       sqlite3_close(db); // Закрываем базу.
       }

    // Если мы оказались тут, то с созданием или подключением к базе всё ОК.
    // Создадим таблицу, если вдруг файл с базой почикали и он пересоздался в предыдущем пункте.
    if(db_opened) //
       {
       char *zErrMsg = 0;
       rc = sqlite3_open("data.db", &db); // Снова открываем базу

       // Создание таблицы (пояснения к SQL не входят в данную тему) если её нет в базе.
       rc = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS messages \
          (ID INTEGER PRIMARY KEY ASC, DATE TEXT, DT INTEGER, MESSAGE TEXT, IMPORTANT INTEGER, COLOR INTEGER);", exec_callback, 0, &zErrMsg);

       if(rc!=SQLITE_OK)
          {
          Status("Ошибка SQL: "+AnsiString(zErrMsg)); // Сообщим об ошибке в SQL запросе или о
          db_opened = false;
          sqlite3_free(zErrMsg);
          }
       }

Внесение записей в таблицу
    Код: выделить все
    AnsiString query, date, dt, message_sql, important, color;
          char *zErrMsg = 0;
          date          = FormatDateTime("yyyy-mm-dd hh:nn:ss", message->date);
          dt             = FloatToStrF( message->dt, ffFixed, 20, 0 ); // Секунд от 01.01.1900 00:00:00 GMT
          message_sql    = AnsiReplaceStr(message->message,"'","''");
          important       = (message->important)?AnsiString("1"):AnsiString("0");
          color          = message->color;

          query  = "INSERT INTO messages (DATE, DT, MESSAGE, IMPORTANT, COLOR) VALUES ";
          query += "('"+date+"',"+dt+",'"+message_sql+"',"+important+",'"+color+"');";
          //ShowMessage(color);
          try
             {
             char *zErrMsg = 0;
             rc = sqlite3_open("data.db", &db);
             // Ускорим процесс записи, пихнув транзакцию в память, вместо диска
             rc = sqlite3_exec(db, "PRAGMA journal_mode = MEMORY", NULL, NULL, &zErrMsg);
             if(rc!=SQLITE_OK)
                {
                Status("Ошибка SQL [PRAGMA journal_mode = MEMORY]: "+AnsiString(zErrMsg));
                sqlite3_free(zErrMsg);
                return;
                }

             rc = sqlite3_exec(db, query.c_str(), exec_callback, 0, &zErrMsg);
             if(rc!=SQLITE_OK)
                {
                Status("Ошибка SQL: "+AnsiString(zErrMsg));
                sqlite3_free(zErrMsg);
                }
             }
          __finally
             {
             sqlite3_close(db);
             }

Проблема, это задача в решении которой никто не заинтересован.
СВС

Вернуться в C++

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Яндекс.Метрика
cron