C++, Qt, Базы данных

Отображение данных выборки в виджете QTableView

Предположим, что на форме расположен объект класса QStackedWidget, на страницах которого расположены объекты QTableView, отображающие различные данные. В один момент времени данные будут отображаться только в одном из виджетов QTableView (по одному на страницу stacked widget). Объявим модель для данных типа QSqlQueryModel: Продолжить чтение «Отображение данных выборки в виджете QTableView»

Автоматизированная система работы сервисного центра Москва
C++, Базы данных, Портфолио

SVCenter. Автоматизация работы сервисного центра. C++Builder + MS SQL Server

SVCenter, Автоматизированная система обработки информации сервисного центра, г.Москва. Выполнена в C++Builder + MS SQL Server. Открыть исходное изображение.

Задачи системы:

  • ведение (добавление, редактирование, удаление) данных
  • регистрация работ с единицей техники от приема до выдачи клиенту, включая загрузку необходимых для работы фотографий
  • составление соответствующей документации для печати (договоры, акты и пр.)
  • экспорт необходимых данных в MS Excel
  • ведение базы клиентов
  • разделение уровней доступа к программе (администратор, начальник участка и пр.)

 

Моё портфолио

Связь со мной 

Автоматизированная система Складской учет C++Builder MySQL
C++, Delphi, Базы данных, Портфолио

АС «Складской учет». C++ Builder + MySQL

Автоматизированная система «Складской учет» выполнена в среде разработки C++ Builder + СУБД MySQL. Учебный проект. Посмотреть изображение в полном размере.

Функции:

  • Ведение (добавление, редактирование, удаление) данных БД
  • Учет текущего количества товара на складе
  • Поставка, отгрузка и возврат товара
  • Формирование соответствующих актов для последующей печати.

Чтобы заказать проект или получить консультацию, перейдите, пожалуйста, на страницу Контакты.

Посмотрите другие работы — моё портфолио: https://secretsilent.ru/портфолио/

Инфо обо мне — давайте знакомиться! 🙂 https://secretsilent.ru/info/

ИС отдела материально-технического снабжения Delphi + Interbase
Delphi, Базы данных, Портфолио

ИС отдела материально-технического снабжения. Delphi + Interbase

ИС отдела материально-технического снабжения. Выполнена в Delphi + СУБД Interbase. Учебный проект. Изображение в полном размере.

Функции:

  • Просмотр информации
  • Ведение (добавление, редактирование, удаление) данных
  • Создание печатных отчетов
  • Разделение уровней доступа (администратор, сотрудник, сотрудник ОМТС)

Чтобы заказать проект или получить консультацию, перейдите, пожалуйста, на страницу Контакты.

Моё портфолио: https://secretsilent.ru/портфолио/

Познакомимся? 🙂 Инфо обо мне: https://secretsilent.ru/info/

ИС Библиотека. C++ Builder + Access
C++, Базы данных, Портфолио

Информационная система «Библиотека»: C++ Builder + MS Access

Информационная система «Библиотека». Выполнена в C++ Builder + Microsoft Access. Учебный проект. Изображение в полном размере.

Функции:

  • Просмотр, поиск и фильтрация данных
  • Ведение (добавление, редактирование, удаление) данных.

Чтобы заказать проект или получить консультацию, перейдите, пожалуйста, на страницу Контакты.

Моё портфолио: https://secretsilent.ru/портфолио/

Давайте знакомиться! Инфо обо мне: https://secretsilent.ru/info/

Qt, Базы данных

Способы выполнения запросов к базе данных в Qt

В записи Подключение к базе данных в Qt я описала, каким образом в Qt можно создать подключение к базе. Теперь рассмотрим такую базовую операцию, как запрос на выборку данных. Сначала необходимо подключить следующие классы:

[pastacode lang=»cpp» manual=»%23include%20%3CQSqlQuery%3E%0A%23include%20%3CQSqlError%3E%20%2F%2F%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%0A%23include%20%3CQDebug%3E%20%2F%2F%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BE%D1%87%D0%BD%D0%BE%D0%B9%20%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8″ message=»» highlight=»» provider=»manual»/]

Пусть в базе данных имеется таблица следующего вида:

[pastacode lang=»sql» manual=»CREATE%20TABLE%20tableName%0A(%0A%20%20id%20integer%20NOT%20NULL%2C%0A%20%20fieldName%20character%20varying(100)%20NOT%20NULL%2C%0A%20%20CONSTRAINT%20entities_pkey%20PRIMARY%20KEY%20(id)%0A)» message=»Таблица в PostgreSQL» highlight=»» provider=»manual»/]

В программе необходимо произвести выборку значений из этой таблицы по какому-то критерию: fieldName должно содержать в себе подстроку «имя»:

Способ 1: QString

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0Aif%20(!query.exec(QString(%22select%20*%20from%20tableName%20%22%0A%09%09%09%09%09%09%22where%20fieldName%20like%20’%251’%20%22%0A%09%09%09%09%09%20%20%20%22order%20by%20id%22).arg(%22%25%D0%B8%D0%BC%D1%8F%25%22)))%0A%09qDebug()%20%3C%3C%20query.lastError().text()%3B» message=»Через строку с параметрами» highlight=»» provider=»manual»/]

Задаем строку запроса, вместо изменяющихся величин задаем параметры через «%».

Способ 2: bindValue

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0Aquery.prepare(%22select%20*%20from%20tableName%20%22%0A%09%09%09%22where%20fieldName%20like%20%3Aparam%20%22%0A%09%09%09%22order%20by%20id%22)%3B%0Aquery.bindValue(%22%3Aparam%22%2C%20QVariant(%22%25%D0%B8%D0%BC%D1%8F%25%22))%3B%0Aif%20(!query.exec())%0A%09qDebug()%20%3C%3C%20query.lastError().text()%3B» message=»Через bindValue» highlight=»» provider=»manual»/]

Преобразование QVariant() передаст в запрос параметр нужного типа.

Способ 3. addBindValue

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0Aquery.prepare(%22select%20*%20from%20tableName%20%22%0A%09%09%09%22where%20fieldName%20like%20%3F%20%22%0A%09%09%09%22order%20by%20id)%3B%0Aquery.addBindValue(QVariant(%22%25%D0%B8%D0%BC%D1%8F%25%22))%3B%0Aif%20(!query.exec())%0A%09qDebug()%20%3C%3C%20query.lastError().text()%3B» message=»Через addBindValue» highlight=»» provider=»manual»/]

Здесь явно не указываются параметры. addBindValue последовательно по тексту запроса подставляет указанные значения параметров.

 

Qt, Базы данных

Qt. Динамическое создание виджетов на форме

Динамическое создание виджетов на форме может помочь, когда расположение и/или видимость виджетов подпадает под какие-то условия. Приведу пример. Допустим, в базе данных есть некая таблица, в которой хранятся настройки видимости, подписи, id наименований колонок основных таблиц базы, где хранятся важные данные:

[pastacode lang=»sql» manual=»CREATE%20TABLE%20table_settings%0A(%0Aid%20serial%20NOT%20NULL%2C%0Atable_id%20integer%20NOT%20NULL%2C%0Acolumn_id%20integer%2C%0Avisible%20boolean%20NOT%20NULL%20DEFAULT%20true%2C%0Acaption%20character%20varying(50)%2C%0Aname_%20character%20varying(50)%2C%0ACONSTRAINT%20table_settings_pkey%20PRIMARY%20KEY%20(id)%2C%0ACONSTRAINT%20table_settings_table_id_fkey%20FOREIGN%20KEY%20(table_id)%0AREFERENCES%20table_names%20(id)%20MATCH%20SIMPLE%0AON%20UPDATE%20CASCADE%20ON%20DELETE%20CASCADE%0A)» message=»» highlight=»» provider=»manual»/]

где

  • id — ID записи п/п
  • table_id — id таблицы, о колонках которой хранится информация
  • visible — должна ли быть данная колонка видна
  • caption — название колонки, которое задается пользователем
  • name_ — наименование колонки, которое задается при создании таблицы

[pastacode lang=»sql» manual=»CREATE%20TABLE%20table_names%0A(%0Aid%20serial%20NOT%20NULL%2C%0Aname_%20character%20varying%20NOT%20NULL%2C%0ACONSTRAINT%20table_names_pkey%20PRIMARY%20KEY%20(id)%2C%0ACONSTRAINT%20table_names_name__key%20UNIQUE%20(name_)%0A)» message=»» highlight=»» provider=»manual»/]

А это, собственно, та таблица, где хранятся наименования таблиц, для которых нам надо выставить некие настройки.

Для динамического создания виджетов (пусть в нашем примере это будут виджеты классов QLabel и QLineEdit — подпись и поле ввода) на форме разместим объект QGridLayout, куда мы будем «пихать» виджеты. Я еще делаю такой трюк: помещаю в layout объекты в ряд в таком количестве, как хочу видеть результат:

Динамическое создание виджетов на форме в Qt

Далее эти два виджета делаю невидимыми:

[pastacode lang=»cpp» manual=»ui-%3Elabel-%3EsetVisible(false)%3B%0Aui-%3ElineEdit-%3EsetVisible(false)%3B» message=»» highlight=»» provider=»manual»/]

Для того, чтобы не просто разместить виджеты на форме, но и потом брать из них информацию для наших нужд, объявим в отделе private класса формы объект класса QVector<QLineEdit*> lineEdits.

Теперь приступим непосредственно к динамическому созданию виджетов.

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0A%2F%2F%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BC%20%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D1%83%20%D0%BD%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D1%8B%D1%85%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9%20%D0%B8%D0%B7%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%0Aif%20(!query.exec(QString(%22select%20column_id%2C%20caption%2C%20name_%2C%20visible%20from%20table_settings%20%22%0A%22where%20%22%0A%22table_id%20%3D%20(select%20id%20from%20table_names%20where%20%22%0A%22name_%20%3D%20’products’)%20%22%0A%22order%20by%20column_id%22)))%0AqDebug()%20%3C%3C%20query.lastError().text()%3B%20%0Awhile%20(query.next())%20%7B%20%0A%09QLabel%20*newLabel%20%3D%20new%20QLabel(this)%3B%20%2F%2F%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%BE%D0%B5%20%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B8%20newLabel-%3EsetText(query.value(1).toString()%2B%22%3A%22)%3B%0A%09newLabel-%3EsetObjectName(%22label%22%2Bquery.value(2).toString())%3B%0A%09%2F%2F%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D1%8B%D0%B9%20%D0%B2%20%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8%20%D0%BE%D1%82%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20visible%20%D0%B2%20%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B0%D1%85%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0%0A%09newLabel-%3EsetVisible(query.value(3).toBool())%3B%0A%09%2F%2F%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B0%D0%B5%D0%BC%20%D0%B2%20layout%0A%09ui-%3EwidgetsLayout-%3EaddWidget(newLabel)%3B%20%2F%2FQGridLayout%0A%09QLineEdit%20*newEdit%20%3D%20new%20QLineEdit(this)%3B%0A%09newEdit-%3EsetObjectName(query.value(2).toString())%3B%0A%09newEdit-%3EsetVisible(query.value(3).toBool())%3B%0A%09ui-%3EwidgetsLayout-%3EaddWidget(newEdit)%3B%0A%09%2F%2F%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC%20%D0%B2%20%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%0A%09lineEdits.push_back(newEdit)%3B%0A%7D%0A%2F%2F%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%B0%20%D1%84%D0%BE%D1%80%D0%BC%D1%8B%20%D0%B2%20%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8%20%D0%BE%D1%82%20%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BD%D0%B0%20%D0%BD%D0%B5%D0%B9%20%D0%B2%D0%B8%D0%B4%D0%B6%D0%B5%D1%82%D0%BE%D0%B2%0Athis-%3Eresize(this-%3EsizeHint())%3B» message=»» highlight=»» provider=»manual»/]

Динамическое создание виджетов на форме в Qt

Чтобы обратится к отдельному объекту в векторе, достаточно указать его индекс:

[pastacode lang=»cpp» manual=»for%20(int%20i%20%3D%200%3B%20i%20%3C%20lineEdits.size()%3B%20%2B%2Bi)%0A%09qDebug()%20%3C%3C%20lineEdits%5Bi%5D-%3EobjectName()%20%3C%3C%20%22%20-%20%22%20%3C%3C%20lineEdits%5Bi%5D-%3Etext()%3B» message=»» highlight=»» provider=»manual»/]

Более элегантная и универсальная версия этого метода представлена здесь: Динамическое создание виджетов Qt. QGridLayout

Qt, Базы данных

Подключение к базе данных в Qt

Для подключения к базе данных нам необходимо включить в проект следующие классы:

[pastacode lang=»cpp» manual=»%23include%20%3CQMessageBox%3E%20%2F%2F%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8E%0A%23include%20%3CQSqlDatabase%3E%0A%23include%20%3CQSqlError%3E» message=»» highlight=»» provider=»manual»/]

QMessageBox позволит вывести информацию о статусе подключения к базе данных, QSqlDatabase позволит совершить это подключение, а без QSqlError мы не сможем узнать, какая ошибка возникла при неудачном подключении к базе.
Необходимо также в тексте файла проекта (*.pro) указать следующее:

QT += sql

[pastacode lang=»cpp» manual=»%2F*QPSQL%20-%20%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%D0%B0%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20%D1%82%D0%BE%D0%B9%20%D0%B8%D0%BB%D0%B8%20%D0%B8%D0%BD%D0%BE%D0%B9%20%D0%A1%D0%A3%D0%91%D0%94%2C%20%D0%B2%20%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B5%20-%20%D0%BA%20PostgreSQL%3B%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20%D0%B1%D0%B0%D0%B7%D0%B5%20MS%20SQL%20Server%20%D0%B2%D0%B0%D0%BC%20%D0%BD%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D0%BE%20%D1%81%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D0%B0%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20ODBC*%2F%0A%0AQSqlDatabase%20db%20%3D%20QSqlDatabase%3A%3AaddDatabase(%22QPSQL%22)%3B%20%20%2F*%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%D0%B0%20%D0%91%D0%94%20%D1%82%D0%B0%D0%BA%D0%B6%D0%B5%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D1%83%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%83%20%D0%91%D0%94%3A%20addDatabase(%22QPSQL%22%2C%20%22myConnection1%22)%0A%D0%B8%D0%BC%D1%8F%20%D0%B8%D0%BB%D0%B8%20%D0%B0%D0%B4%D1%80%D0%B5%D1%81%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%2C%20%D0%B3%D0%B4%D0%B5%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D1%81%D1%8F%20%D0%A1%D0%A3%D0%91%D0%94*%2F%0Adb.setHostName(%22localhost%22)%3B%0A%2F%2F%D0%B8%D0%BC%D1%8F%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%0Adb.setDatabaseName(%22myDB%22)%3B%0A%2F%2F%D0%B8%D0%BC%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%0Adb.setUserName(%22user1%22)%3B%0A%2F%2F%D0%B5%D0%B3%D0%BE%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C%0Adb.setPassword(%22123321%22)%3B%0A%2F*%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D0%B2%D0%B0%D0%B5%D0%BC%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%3B%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%BD%D0%B5%D1%83%D0%B4%D0%B0%D1%87%D0%BD%D0%BE%20-%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B8%D0%BC%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BE%D0%B1%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B5*%2F%0Aif%20(!db.open())%0AQMessageBox%3A%3Acritical(NULL%2CQObject%3A%3Atr(%22%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%22)%2Cdb.lastError().text())%3B» message=»» highlight=»» provider=»manual»/]

При попытке подключения к базе данных PostgreSQL можно получить сообщение об ошибке «Driver not loaded». Это значит, что ваша система не может найти драйвер PostgreSQL. Необходимо в системный путь (PATH) вписать пути к папкам lib и bin вашей версии СУБД.

При удачном подключении к базе данных все обращения к базе в вашем проекте будут автоматически распознавать это подключение. Если подключение было задано без наименования подключения, то оно будет расцениваться как подключение по умолчанию. В проекте обязательно должно быть такое подключение, иначе получим ошибку. Работая с потоками в проекте для каждого потока должно быть свое подключение под своим именем.

Подключение к базе данных Microsoft SQL Server в Qt.

Инфо обо мне: https://secretsilent.ru/info/

Базы данных

SQLite, SQLiteStudio и отображение больших чисел в поле типа string в виде числа с плавающей точкой

В SQLite предусмотрено только 5 типов данных:

  • NULL. Пустое значение в таблице базы.
  • INTEGER. Целочисленное значение.
  • REAL. Числовое значение с плавающей точкой.
  • TEXT. Значение строки текста. Хранится с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE).
  • BLOB. Значение бинарных данных, хранящихся точно в том же виде, в каком были введены.

Однако некоторые менеджеры, позволяющие управлять базами данных SQLite, предоставляют нам возможность «большего» выбора. Так, SQLite Studio предоставляют выбор из следующих типов данных:

  • bigint
  • blob
  • boolean
  • char
  • date
  • datetime
  • decimal
  • double
  • integer
  • int
  • none
  • numeric
  • real
  • string
  • text
  • time
  • varchar

Выходит, 17 против стандартных 5. Однако все эти 17 типов в конечном итоге приводятся все к тем же null, integer, real, text или blob. И каким образом после преобразования будут выглядеть данные решает SQLite, а не вы.

Например, в SQLite нет типа данных для хранения даты и времени. Однако есть встроенные функции SQLite для работы с этими типами данных. Для наглядности при создании столбца в разделе тип данных вы указываете datetime, но на самом деле данные будут храниться как тип данных text.

Итак, перейдем к теме. Задача: хранение кодов, состоящий из количества цифр >20, в поле базы строкового типа. Допустим, выбран тип string в SQLite Studio для решения данного вопроса:

[pastacode lang=»sql» manual=»CREATE%20TABLE%20Codes%20(%0Acode%20STRING%20(50)%20UNIQUE%20NOT%20NULL)%3B» message=»» highlight=»» provider=»manual»/]

Для строк 2222223333333333666666666999999999 и 1111111114444444444222222222333333333 в таблице вы увидете

Так, конечно же, не пойдет: код нужен целиком. Чтобы такие строки отображались корректно, необходимо использовать  тип данных text, char, varchar (которые в конечном итоге приводятся к типу данных text):

Дело в том, что тип string будет приводится к типам real или integer, если данные похожи на вещественное или целое число, соответственно. Так, строка вида ‘0147’ преобразуется в ‘147’.