Форум русскоязычного сообщества Ubuntu


Автор Тема: установка qtcreator и mysql  (Прочитано 1266 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн niponel

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
установка qtcreator и mysql
« : 30 Июнь 2014, 21:32:48 »
Здравствуйте.
Скажите пожалуйста как верно установить qtcreator(qt-opensource-linux-x86-5.3.0.run) и mysql ?
так что бы не было ошибки
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
QSqlQuery::exec: database not open
в моей предыдущей теме решение не подошло, может из-за того что что-то неверно установил...
Очень прошу вашей помощи.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: установка qtcreator и mysql
« Ответ #1 : 01 Июль 2014, 08:58:52 »
Вероятно, Вы компилировали Qt без поддержки mysql.
Лично я забил на использование встроенной поддержки mysql в Qt и использую С-библиотеки mysql. Это, на мой взляд, универсальнее.

Оффлайн niponel

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: установка qtcreator и mysql
« Ответ #2 : 01 Июль 2014, 09:36:15 »
Вероятно, Вы компилировали Qt без поддержки mysql.
Лично я забил на использование встроенной поддержки mysql в Qt и использую С-библиотеки mysql. Это, на мой взляд, универсальнее.
можете рассказать по шагам как это сделать, начиная с компиляции qt?

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 750
    • Просмотр профиля
Re: установка qtcreator и mysql
« Ответ #3 : 01 Июль 2014, 09:58:32 »
Скорее всего не установлена библиотека libmysqlclient (или как-то так)

Оффлайн niponel

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: установка qtcreator и mysql
« Ответ #4 : 01 Июль 2014, 10:01:39 »
Скорее всего не установлена библиотека libmysqlclient (или как-то так)
установлена

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: установка qtcreator и mysql
« Ответ #5 : 01 Июль 2014, 14:00:36 »
можете рассказать по шагам как это сделать, начиная с компиляции qt?
Про компиляцию Qt лучше спросите у Гугла.
Ref про использование библиотек mysql
http://linuxshare.ru/docs/software/SQL/mysql/manual/mysql_connect.html
Подключите header mysql в проект.
Введите приватные переменные, касающиеся DB (так удобнее).
Напишите приватные функции подключения,отключения к/от БД.
Напишите вызываемые функции добывания данных из БД.
И используйте их.
Для примера.

Хидер и Подключение/отключение к/от БД.
class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    // функции, вызываемые из QML (callback function)
    Q_INVOKABLE QString F1(QString);
    Q_INVOKABLE QString F2(QString);
    Q_INVOKABLE QString F3(QString);
    // чтение таблицы стилей
    Q_INVOKABLE QString readStyleSheet(QString fileName);
    Q_INVOKABLE void setNewIP(QString IP);
    Q_INVOKABLE QString testConnection(void);
    Q_INVOKABLE QString loadOneTag(QString id);
    ...



private:
    ....
    // параметры и функции работы с DB
    QString hostName;
    //QString dbName;
    //QString userName;
    //QString readDbPassword;
    //QString writerName;
    //QString writeDbPassword;

    MYSQL *db;

    void conRdDb();
    void conWrDb();
    void closeDb();
};

void MainWindow::conRdDb()
{
    db = mysql_init(NULL);
    if(db==NULL)
    {
            qDebug() << "Ошибка создания MYSQL дескриптора. Полный пипец";
    }
    else
    {
        if (!mysql_real_connect(db, hostName.toAscii().data(), "user", "userPas", "nameDB", 0,NULL,0))
        {
            qDebug() << "Ошибка подключения к Db - выход";
            mysql_error(db);
        }
        else
        {
            qDebug() << "Подключились читать";
            mysql_query(db, "SET CHARACTER SET 'utf8'");
            mysql_query(db, "SET NAMES 'utf8");
        }
    }

}

void MainWindow::closeDb()
{
    // Закрываем соединение с сервером базы данных
    mysql_close(db);
    qDebug() << "Отключились";
}
Пример чтения
QString  MainWindow::loadOneTag(QString id)
{
    QString s = "";
    QString q = "SELECT value FROM readdata WHERE tag_id="+id;
    qDebug() << "id="<<id;
    conRdDb();
    if (mysql_query(db,q.toAscii().constData()))
    {
        qDebug() << "Ошибка запроса";
    }
    else // запрос выполнен, обработка возвращенных им данных
    {
        MYSQL_RES *result;
        result = mysql_store_result(db);

        if (result){

            MYSQL_ROW row;
            if(row= mysql_fetch_row(result)) {
                s = QString(row[0]);
                qDebug() << "Чтение результата";
            }
            mysql_free_result(result);
        }
        else
        {
            qDebug() << "Запрос не вернул ничего";
        }
    }
    closeDb();
    return s;
}

Пример вызова из QML формы (таймер стучит каждую секунду и собирает теги из БД,  для визуализации мнемосхемы)

...
    property bool tag1: false;
    property bool tag2: false ;
    property bool tag3: false;
    ...
    property bool tag156: false;

...
    Timer {
        interval: 1000; running: true; repeat: true
        onTriggered: loadTags()
        function loadTags()
        {
            tag1 = Number(window.loadOneTag("82"));
            tag2 = Number(window.loadOneTag("83"));
            tag3 = Number(window.loadOneTag("84"));
            ...
            tag156 = Number(window.loadOneTag("397"));
        }
    }
...

Как видите все тривиально.
« Последнее редактирование: 01 Июль 2014, 14:08:06 от alexander.pronin »

 

Страница сгенерирована за 0.066 секунд. Запросов: 24.