crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Создание БД и таблицы
ht1515
  опции профиля:
сообщение 26.11.2015, 8:18
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 14.4.2012
Пользователь №: 3324

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ничего не понимаю, прочитал кучу статей одна дублирует другую

Все начинают с этого:
Цитата
Соединиться с базой данных можно вот так:

QSqlDatabase db = QsqlDatabase::addDatabase("QMYSQL", "mydb");
db.setHostName("bigblue");
db.setDatabaseName("flightdb");
db.setUserName("acarlson");
db.setPassword("1uTbSbAs");
bool ok = db.open();

* This source code was highlighted with Source Code Highlighter.



Вот такой код не пашет, если заранее не создать БД... Возможно это связано с плагином для mysql.
Потому что все примеры в книгах и статьях успешно используют скллайт и у них все шикарно работает, хотя наверно просто заранее ручками создают БД.

#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();
}





Я вот например не хочу извращаться и выполнять запросы

Цитата
SHOW DATABASES


потом вычленять из них свою БД и утверждать что она существует...

Как средствами КУТЕ легко и просто создать БД?

Сообщение отредактировал ht1515 - 26.11.2015, 8:25
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ViGOur
  опции профиля:
сообщение 26.11.2015, 9:03
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Попробуй так:
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");
    // ... создание таблиц или еще чего-то там
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 7:11