1: Qt и SQL. Программирование баз данных Для использования баз данных, Qt предоставляет отдельный модуль QtSql. Для его использования необходимо сообщить об этом — просто добавьте в проектный файл следующую строку:
2: А для того, чтобы работать с классами этого модуля, необходимо включить заголовочный метафайл QtSql. А для того, чтобы работать с классами этого модуля, необходимо включить заголовочный метафайл QtSql. Для высылки запросов используется класс QSqlQuery. Для создания таблицы используется оператор CREATE TABLE, в котором указываются имена столбцов таблицы, их тип, а также задается первичный ключ: CREATE TABLE addressbook ( number INTEGER PRIMARY KEY NOT NULL, name VARCHAR(15), phone VARCHAR(12), email VARCHAR(15) );
3: После создания таблицы можно добавлять данные. Для этого SQL предоставляет оператор вставки insert into. Сразу после названия таблицы нужно указать в скобках имена столбцов, в которые будут заноситься данные. После создания таблицы можно добавлять данные. Для этого SQL предоставляет оператор вставки insert into. Сразу после названия таблицы нужно указать в скобках имена столбцов, в которые будут заноситься данные. Сами данные указываются после ключевого слова values. INSERT INTO addressbook (number, name, phone, email) VALUES(1, Piggy, 49 631322187, piggymega. de); INSERT INTO addressbook (number, name, phone, email) VALUES(2, Kermit, 49 631322181, kermitmega. de);
4: Составной оператор select . . . from . . . where осуществляет операции выборки и проекции. Выборка соответствует выбору строк, а проекция — выбору столбцов. Этот оператор возвращает таблицу, созданную согласно заданным критериям. Ключевое слово SELECT является оператором для проведения проекции, то есть в нем указываются столбцы, которые должны стать ответом на запрос. Если указать после SELECT знак , то результирующая таблица будет содержать все столбцы таблицы, к которой был адресован запрос. Указание конкретных имен столбцов устраняет в ответе все остальные.
5: Ключевое слово FROM задает таблицу, к которой адресован запрос. Ключевое слово FROM задает таблицу, к которой адресован запрос. Ключевое слово WHERE является оператором выборки. Выборка осуществляется согласно условиям, указанным сразу после оператора. Например, для получения адреса электронной почты мисс Piggy нужно сделать следующее: SELECT email FROM addressbook WHERE name Piggy;
6: Для изменения данных таблицы используется составной оператор UPDATE . . . SET. После названия таблицы в операторе SET указывается название столбца (или столбцов, через запятую), в который будет заноситься нужное значение. Изменение данных производится в строках, удовлетворяющих условию, поставленному в ключевом слове WHERE. Для изменения данных таблицы используется составной оператор UPDATE . . . SET. После названия таблицы в операторе SET указывается название столбца (или столбцов, через запятую), в который будет заноситься нужное значение. Изменение данных производится в строках, удовлетворяющих условию, поставленному в ключевом слове WHERE. В показанном ниже примере производится замена адреса электронной почты мисс Piggy с piggymega. de на piggysupermega. de: UPDATE addressbook SET email piggysupermega. de WHERE name Piggy;
7: Удаление строк из таблицы производится при помощи оператора DELETE . . . FROM. После ключевого слова WHERE следует критерий, согласно которому производится удаление строк. Например, удалить адрес мисс Piggy из таблицы можно следующим образом: Удаление строк из таблицы производится при помощи оператора DELETE . . . FROM. После ключевого слова WHERE следует критерий, согласно которому производится удаление строк. Например, удалить адрес мисс Piggy из таблицы можно следующим образом: DELETE FROM addressbook WHERE name Piggy;
8: Классы модуля QtSql разделяются на три уровня: Классы модуля QtSql разделяются на три уровня: Уровень драйверов. Программный уровень. Уровень пользовательского интерфейса. К первому уровню относятся классы для получения данных на физическом уровне. Это такие классы, как: QSqlDriver, QSqlDriverCreator, QSqlDriverCreatorBase, QSqlDriverPlugin и QSqlResult Они необходимы для создания собственного драйвера для менеджера базы данных. Но в большинстве случаев все ограничивается использованием конкретной СУБД , поддерживаемой Qt.
9: Классы второго уровня предоставляют программный интерфейс для обращения к базе данных. К классам этого уровня относятся следующие классы: QSqlDatabase, QSqlQuery, QSqlError, QSqlField, QSqlIndex и QSqlRecord. Классы второго уровня предоставляют программный интерфейс для обращения к базе данных. К классам этого уровня относятся следующие классы: QSqlDatabase, QSqlQuery, QSqlError, QSqlField, QSqlIndex и QSqlRecord. Третий уровень предоставляет модели для отображения результатов запросов в представлениях интервью. К этим классам относятся: QSqlQueryModel, QSqlTableModel и QSqlRelationalTableModel.
10: Для соединения с базой данных прежде всего нужно активизировать драйвер. для этого вызывается статический метод QSqlDatabase::addDatabase(). Для соединения с базой данных прежде всего нужно активизировать драйвер. для этого вызывается статический метод QSqlDatabase::addDatabase(). В него нужно передать строку, обозначающую идентификатор драйвера СУБД.
12: Методы должны вызываться из объекта, созданного с помощью статического метода QSqlDatabase::addDatabase(). Методы должны вызываться из объекта, созданного с помощью статического метода QSqlDatabase::addDatabase(). Само соединение осуществляется методом QSqlDatabase::open(). Значение, возвращаемое им, рекомендуется проверять. В случае возникновения ошибки, информацию о ней можно получить с помощью метода QSqlDatabase::lastError(), который возвращает объект класса QSqlError. Его содержимое можно вывести на экран с помощью qDebug(). Если у вас возникла необходимость получить строку с ошибкой, то нужно вызвать из объекта класса QSqlError метод text().
13: Для исполнения команд SQL, после установления соединения, можно использовать класс QSqlQuery. Для исполнения команд SQL, после установления соединения, можно использовать класс QSqlQuery. Запросы (команды) оформляются в виде обычной строки, которая передается в конструктор или в метод QSqlQuery::exec(). В случае конструктора, запуск команды будет производиться автоматически, при создании объекта.
15: Класс QSqlQuery предоставляет возможность навигации. Например, после выполнения запроса SELECT можно: Класс QSqlQuery предоставляет возможность навигации. Например, после выполнения запроса SELECT можно: С помощью метода next() перемещаться на следующую строку данных, Методом previous() перемещаться на предыдущую строку данных. При помощи методов first() и last() можно установить первую и последнюю строку данных соответственно. Метод seek() устанавливает строку данных по указанному целочисленному индексу в его параметре. Количество строк данных можно получить вызовом метода size().
16: Дополнительные сложности возникают с запросом INSERT. Дело в том, что в запрос нужно внедрять данные. Для достижения этого можно воспользоваться двумя методами: prepare() и bindValue(). В методе prepare() мы задаем шаблон, данные в который подставляются методами bindValue(). Например: Дополнительные сложности возникают с запросом INSERT. Дело в том, что в запрос нужно внедрять данные. Для достижения этого можно воспользоваться двумя методами: prepare() и bindValue(). В методе prepare() мы задаем шаблон, данные в который подставляются методами bindValue(). Например: query. prepare("INSERT INTO addressbook (number, name, phone, email) VALUES(:number, :name, :phone, :email);"); query. bindValue (" :number", "1"); query. bindValue(":name", "Piggy"); query. bindValue(":phone", " 49 631322187"); query. bindValue(":email", "piggymega. de");
17: Также можно воспользоваться вариантом использования безымянных параметров: Также можно воспользоваться вариантом использования безымянных параметров: query. prepare("INSERT INTO addressbook (number, name, phone, email) VALUES(?, ?, ?, ?);"); query. bindValue("1"); query. bindValue("Piggy"); query. bindValue(" 49 631322187"); query. bindValue("piggymega. de");
18: В качестве третьего варианта — можно воспользоваться классом QString, в частности методом QString::arg(), с помощью которого можно произвести подстановку значений данных. В качестве третьего варианта — можно воспользоваться классом QString, в частности методом QString::arg(), с помощью которого можно произвести подстановку значений данных.
21: В случае удачного соединения с базой данных с помощью createConnection() создается строка, содержащая команду SQL для создания таблицы. В случае удачного соединения с базой данных с помощью createConnection() создается строка, содержащая команду SQL для создания таблицы. Эта строка передается в метод exec() объекта класса QSqlQuery. Если создать таблицу не удается, то на консоль будет выведено предупреждающее сообщение. Ввиду того, что в таблицу будет внесена не одна строка, в строковой переменной strF при помощи символов спецификации определяется шаблон для команды INSERT. Вызовы методов arg() класса QString подставляют нужные значения используя шаблон.
22: Затем, когда база данных создана и все данные были внесены в таблицу, выполняется запрос SELECT, помещающий строки и столбцы таблицы в объект query. Затем, когда база данных создана и все данные были внесены в таблицу, выполняется запрос SELECT, помещающий строки и столбцы таблицы в объект query. Вывод значений таблицы на консоль производится в цикле. При первом вызове метода next() этот объект будет указывать на самую первую строку таблицы. Последующие вызовы приведут к перемещению указателя на следующие строки. В том случае, если записей больше нет, метод next() вернет false, что приведет к выходу из цикла.
23: Для получения результата запроса следует вызвать метод QSqlQuery::value(), в котором необходимо передать номер столбца. Для этого мы воспользуемся методом record(). Для получения результата запроса следует вызвать метод QSqlQuery::value(), в котором необходимо передать номер столбца. Для этого мы воспользуемся методом record(). Этот метод возвращает объект класса QSqlRecord, который содержит информацию, относящуюся к запросу SELECT. С его помощью, вызовом метода QSqlRecord::indexOf(), мы получаем индекс столбца.
24: Метод value() возвращает значения типа QVariant. QVariant — это специальный класс, объекты которого могут содержать в себе значения разных типов. Метод value() возвращает значения типа QVariant. QVariant — это специальный класс, объекты которого могут содержать в себе значения разных типов. Поэтому, в нашем примере, полученное значение нужно преобразовать к требуемому типу, воспользовавшись методами QVariant::toInt() и QVariant::toString().
25: Модуль QtSql поддерживает концепцию Интервью, самый простой способ отобразить данные таблицы. Здесь не потребуется цикла для прохождения по строкам таблицы. Модуль QtSql поддерживает концепцию Интервью, самый простой способ отобразить данные таблицы. Здесь не потребуется цикла для прохождения по строкам таблицы.
26: После соединения с базой данных, проводимого с помощью функции createConnection(), После соединения с базой данных, проводимого с помощью функции createConnection(), создается объект табличного представления QTableView и объект табличной модели QSqlTableModel. Вызовом метода setTable() мы устанавливаем актуальную базу в модели. Вызов метода select() производит заполнение данными. вызовом метода setEditStrategy() устанавливается стратегия редактирования SqlTableModel::OnFieldChange. Теперь данные нашей модели можно изменять после двойного щелчка на ячейке. В завершение мы устанавливаем модель в представлении вызовом метода setModel().
27: Класс QSqlTableModel предоставляет три стратегии редактирования, которые устанавливаются с помощью метода setEditStrategy(): Класс QSqlTableModel предоставляет три стратегии редактирования, которые устанавливаются с помощью метода setEditStrategy(): onRowChange — производит запись данных, как только пользователь перейдет к другой строке таблицы; onFieldChange — производит запись данных после того, как пользователь перейдет к другой ячейке таблицы; OnManualSubmit —записывает данные по вызову слота submitAl(). Если вызывается слот revertAll(), то данные возвращаются в исходное состояние.
28: Если вам понадобится произвести отображение данных какого-либо конкретного опроса SELECT, то для этого целесообразнее будет воспользоваться другим классом SQL-моделей — классом QSqlQueryModel. Если вам понадобится произвести отображение данных какого-либо конкретного опроса SELECT, то для этого целесообразнее будет воспользоваться другим классом SQL-моделей — классом QSqlQueryModel. Листинг ниже иллюстрирует отображение только электронных адресов и телефонных номеров всех контактов с именем Piggy. В нашем случае он будет всего лишь один.