Ничего не понимаю, прочитал кучу статей одна дублирует другую
Все начинают с этого:
#include "mainwindow.h"
#include <QApplication>
#include <QtSql>
#include <QSqlDatabase>
#include <QTableView>
#include <QSqlTableModel>
static bool createConnection(QString name) {
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName(name);
db.setUserName("root");
db.setHostName("127.0.0.1");
db.setPassword("111");
db.setPort(3306);
if (!db.open()) {
qDebug() << "Cannot open db!" << db.lastError();
return false;
}
return true;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if (!createConnection("cve_test")) {
return -1;
}
QSqlQuery query;
QString str = "CREATE TABLE addressbook ( "
"number INTEGER PRIMARY KEY NOT NULL,"
"name VARCHAR(15),"
"phone VARCHAR(12),"
"email VARCHAR(15),"
");";
if (!query.exec(str)){
qDebug() << "unable to create table!";
}
QString strF = "INSERT INTO addressbook (number, name, phone, email)"
"VALUES(%1,'%2','%3','%4');";
str =strF.arg("1").arg("Piggy").arg("+45").arg("111");
if (!query.exec(str)) {
qDebug() << "unable to insert to table!";
}
QTableView view;
QSqlTableModel model;
model.setTable("addressbook"); //testcase_structure_tetstlogger
qDebug() << "Cannot model!" <<model.lastError();
// model.removeColumn(0);
model.select();
model.setEditStrategy(QSqlTableModel::OnFieldChange);
view.setModel(&model);
view.show();
return a.exec();
}
Попробуй так:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("password");
if (!db.isValid()){
qDebug() << db.lastError().text();
return;
}
db.open();
QString query = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'addressbook'";
QSqlQuery q = db.exec( query );
if (q.size() == 0)
{
db.exec("CREATE DATABASE IF NOT EXISTS addressbook;");
qDebug() << db.lastError().text();
db.setDatabaseName("addressbook");
// ... создание таблиц или еще чего-то там
}
Тоже немного костыльно, но очередной вариант...
Я что-то подобное придумывал...
Кто-то например в ФС ищет каталог БД и типо если он есть, то это факт того что БД существует.
Странно что разрабы не позаботились об этой функции...
бфло бы круто после
db.open();
создай свой класс на основе QSqlDatabase и переопредели в нем функцию open, и делай там проверки и создания БД.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)