crossplatform.ru

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

> Что за ошибка?
mezmay
  опции профиля:
сообщение 25.4.2011, 17:27
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

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




Репутация:   1  


Первый раз решил использовать базу данных. Написал по примеру:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("Tests");
    db.setUserName("Ivan");
    db.setHostName("localhost");
    db.setPassword("password");

    bool b = db.open();
    if(!b)
        QString error = db.lastError().text();

error содержит:
error = "[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию QODBC3: Unable to connect"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
mezmay
  опции профиля:
сообщение 26.4.2011, 10:47
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

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




Репутация:   1  


Почему этот код работает (отображается таблица с данными):
Раскрывающийся текст
#include <QtGui/QApplication>
#include "sql.h"
#include <QtSql>
#include <QTableView>

static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("addressbook");

    db.setUserName("elton");
    db.setHostName("epica");
    db.setPassword("password");
    if (!db.open()) {
        qDebug() << "Cannot open database:" << db.lastError();
        return false;
    }
    return true;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    bool b = createConnection();

    QSqlQuery query;
    QString   str  = "CREATE TABLE addressbook ( "
        "number INTEGER PRIMARY KEY NOT NULL, "
        "name   VARCHAR(15), "
        "phone  VARCHAR(12), "
        "email  VARCHAR(15) "
        ");";

    query.exec(str);

    QString strF =
        "INSERT INTO  addressbook (number, name, phone, email) "
        "VALUES(%1, '%2', '%3', '%4');";

    str = strF.arg("1")
        .arg("Piggy")
        .arg("+49 631322187")
        .arg("piggy@mega.de");
    query.exec(str);

    str = strF.arg("2")
        .arg("Kermit")
        .arg("+49 631322181")
        .arg("kermit@mega.de");
    query.exec(str);

    //////////////////////////////////////////////////////////////////////////
    QTableView view;
    QSqlTableModel model;
    model.setTable("addressbook");
    model.select();
    view.setModel(&model);
    view.show();

    return a.exec();
}


а этот нет?:
Раскрывающийся текст
#include "cwin.h"

cwin::cwin(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    ui.setupUi(this);

    bool b = createConnection();

    QSqlQuery query;
    QString   str  = "CREATE TABLE addressbook ( "
        "number INTEGER PRIMARY KEY NOT NULL, "
        "name   VARCHAR(15), "
        "phone  VARCHAR(12), "
        "email  VARCHAR(15) "
        ");";

    query.exec(str);

    QString strF =
        "INSERT INTO  addressbook (number, name, phone, email) "
        "VALUES(%1, '%2', '%3', '%4');";

    str = strF.arg("1")
        .arg("Piggy")
        .arg("+49 631322187")
        .arg("piggy@mega.de");
    query.exec(str);

    str = strF.arg("2")
        .arg("Kermit")
        .arg("+49 631322181")
        .arg("kermit@mega.de");
    query.exec(str);

    //////////////////////////////////////////////////////////////////////////
    m_model.setTable("addressbook");
    m_model.select();
    ui.tableView->setModel(&m_model);
    ui.tableView->show();
}

cwin::~cwin()
{

}

bool cwin::createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("addressbook");

    db.setUserName("elton");
    db.setHostName("epica");
    db.setPassword("password");
    if (!db.open()) {
        qDebug() << "Cannot open database:" << db.lastError();
        return false;
    }
    return true;
}

(отображается пустая таблица)

Различие в том в первом случае я все делаю в функции main, а во втором - в классе, с уже добавленной с помощью дизайнера таблицей.

Еще вопрос - как добавлять и удалять данные из таблицы с помощью QSqlTableModel. если можно - пример
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- mezmay   Что за ошибка?   25.4.2011, 17:27
- - maint   Цитата(mezmay @ 25.4.2011, 23:27) Первый ...   25.4.2011, 17:59
- - Litkevich Yuriy   Цитата(mezmay @ 25.4.2011, 20:27) Первый ...   25.4.2011, 19:58
|- - Гость   Цитата(Litkevich Yuriy @ 25.4.2011, 19:58...   27.4.2011, 17:56
- - mezmay   Почему этот код работает (отображается таблица с д...   26.4.2011, 10:47
- - silver47   Вместо: QSqlDatabase db = QSqlDatabase::addDatabas...   26.4.2011, 10:50
- - mezmay   а какая разница? объект QSqlDatabase все равно оди...   26.4.2011, 10:52
- - silver47   ну попробуем по-другому... покажите вывод qDebug(...   26.4.2011, 10:56
- - mezmay   Раскрывающийся текст bool b = createConnection...   26.4.2011, 12:50
- - silver47   if(!query.exec(str)) qDebug...   26.4.2011, 12:59
- - mezmay   Вообще данные есть - открывал создавшуюся базу в т...   26.4.2011, 13:07
- - silver47   В заголовочном файле: QSqlTableModel *m_model; В ...   26.4.2011, 13:29
- - mezmay   Заработало! думаю проблема была в том что m_mo...   27.4.2011, 8:47
- - Litkevich Yuriy   Цитата(Гость_Гость_* @ 27.4.2011, 20:56) ...   27.4.2011, 18:18
- - Borodeys   Вот моя проблема из соседнего обсуждения : Занима...   27.4.2011, 20:05
- - silver47   Цитата(Borodeys @ 27.4.2011, 22:05) Однак...   28.4.2011, 5:01
- - Litkevich Yuriy   Borodeys, форматируй код (тэг: code)   28.4.2011, 10:11
|- - Borodeys   Вуху, заработало! Огромное спасибо silver47. А...   29.4.2011, 12:53
- - silver47   Ну во-первых WHERE (условие) AND (условие). Во-вто...   29.4.2011, 14:42


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


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




RSS Текстовая версия Сейчас: 27.4.2024, 21:10