Russian Qt Forum

Qt => Базы данных => Тема начата: pro100skif от Июнь 18, 2014, 18:37



Название: получение данных из qprocess
Отправлено: pro100skif от Июнь 18, 2014, 18:37
Доброго времени суток, используя сервер mysql получаю список базу данных, затем хочу использовать в программе
при использовании QProcess::readAll в qDebug() получаю следующее:
"Database
information_schema
db1
mysql
name
name11
performance_schema
table1
test
"
мне же необходимо получить каждую строчку в QString
пытался использовать:
Код:
process.start(try1);
    process.waitForReadyRead();
    qDebug()<<process.readAll();
    while(process.readLine()!="")
    {
    QString namex=process.readLine();
    qDebug()<<"DB:"<<namex;
   
    }

    process.waitForFinished();
но столкнулся с тем, что читает оно все нормально, но кроме последней строки ее программа в упор не видит.Заранее спасибо за помощь)


Название: Re: получение данных из qprocess
Отправлено: gil9red от Июнь 18, 2014, 19:01
По идеи,
Код:
while(process.readLine()!="")
не должен сработать, после того как все и так было считано:
Код:
qDebug()<<process.readAll();


Название: Re: получение данных из qprocess
Отправлено: pro100skif от Июнь 18, 2014, 20:25
По идеи,
Код:
while(process.readLine()!="")
не должен сработать, после того как все и так было считано:
Код:
qDebug()<<process.readAll();
да прошу прощения ошибочка вышла это я смотрел что выведет,но если убрать
Код:
qDebug()<<process.readAll();
то проблему это не меняет, последняя строка не считывается...
возможно ли как то подсчитать количество баз данных?тогда можно было б for использовать


Название: Re: получение данных из qprocess
Отправлено: lesav от Июнь 19, 2014, 07:37
Может проще выполнить запрос  ?   
Код
SQL
SHOW DATABASES;
-- OR
SHOW SCHEMAS;


Название: Re: получение данных из qprocess
Отправлено: pro100skif от Июнь 19, 2014, 17:09
Может проще выполнить запрос  ?   
Код
SQL
SHOW DATABASES;
-- OR
SHOW SCHEMAS;
я этот запрос и использую мне необходимо считать название каждой БД из консоли в QString


Название: Re: получение данных из qprocess
Отправлено: lesav от Июнь 20, 2014, 15:08
я этот запрос и использую мне необходимо считать название каждой БД из консоли в QString

Я не понимаю, зачем "мне необходимо считать название каждой БД из консоли в QString"  ???
К чему использовать QProcess ???? если достаточно выполнить запрос к БД средствами QSql*.



Ну как-то так:
Код:
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setUserName("UserName");
    db.setPassword("Password");
    db.setDatabaseName("mysql");
    if (!db.open())
    {
        QSqlError err = db.lastError();
        db = QSqlDatabase();

        qDebug() << "Err: " << err.text();
    }
    else
    {
        QSqlQuery db_query(db);

        if (db_query.exec("SHOW DATABASES"))
        {
            do
            {
                for (int i = 0; i < db_query->record().count(); ++i)
                {
                    qDebug() << db_query->value(i).toString();
                }
            }
            while(db_query->next());
        }
    }


Название: Re: получение данных из qprocess
Отправлено: pro100skif от Июнь 21, 2014, 18:12
я этот запрос и использую мне необходимо считать название каждой БД из консоли в QString

Я не понимаю, зачем "мне необходимо считать название каждой БД из консоли в QString"  ???
К чему использовать QProcess ???? если достаточно выполнить запрос к БД средствами QSql*.



Ну как-то так:
Код:
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setUserName("UserName");
    db.setPassword("Password");
    db.setDatabaseName("mysql");
    if (!db.open())
    {
        QSqlError err = db.lastError();
        db = QSqlDatabase();

        qDebug() << "Err: " << err.text();
    }
    else
    {
        QSqlQuery db_query(db);

        if (db_query.exec("SHOW DATABASES"))
        {
            do
            {
                for (int i = 0; i < db_query->record().count(); ++i)
                {
                    qDebug() << db_query->value(i).toString();
                }
            }
            while(db_query->next());
        }
    }

исправил спасибо, правда использовал не do..while а цикл с предусловием while, иначе первая строка выходит пустая.