Russian Qt Forum
Ноябрь 24, 2024, 02:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как узнать IP подключенного хоста ?  (Прочитано 5498 раз)
admsasha
Гость
« : Октябрь 21, 2009, 03:40 »

Пытаюсь сделать так

Код:
int CreateDB(){
    QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL");
    db.setDatabaseName("mydb");
    db.setUserName("myuser");
    db.setPassword("mypassword");
    db.setHostName("192.168.1.2");
    if( !db.open() )   qDebug() << db.lastError();

    QString conn_id;
    QSqlQuery query(QSqlDatabase::database("mydb"));

    if(!query.exec("select CONNECTION_ID()")){
        QMessageBox::critical(0, QObject::tr("SQL Error"), query.lastError().text());
        return 1;
    }
    query.first();
    conn_id=query.value(0).toString();
    query.clear();

    qDebug() << conn_id;

    if(!query.exec("SHOW PROCESSLIST")){
        QMessageBox::critical(0, QObject::tr("SQL Error"), query.lastError().text());
        return 1;
    }
    
    while (query.next()) {
        qDebug() << query.value(0).toString();
        if (query.value(0).toString() == conn_id) operHost=query.value(2).toString();
    }

    query.clear();

    return 0;
}

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

    if (CreateDB()!=0) return 0;


    qDebug() << operHost;

    return 0;
}

Вывод
Цитировать
"144259"
""

т.е. CONNECTION_ID определился, а список процесов не показал. Проделываю тоже самое с ком. строки. Все данные выдаются нормально (проверка на предмет, что каких то прав нехватает)

Может есть более разумный способ ?


Кстати, как грамотно нужно написать этот кусок кода ?
« Последнее редактирование: Декабрь 24, 2009, 05:09 от admsasha » Записан
BaltikS
Гость
« Ответ #1 : Октябрь 21, 2009, 06:34 »

Млин, вот какое отношение это имеет к Qt? Вам прямиком на www.sql.ru
Записан
admsasha
Гость
« Ответ #2 : Октябрь 21, 2009, 06:40 »

Млин, вот какое отношение это имеет к Qt? Вам прямиком на www.sql.ru
Например, такое. Почему мой запрос QT не видит. Точнее не выдает результат. Для выводов " show" какие то другие методы нужно использовать ?

Я предложил способ нахождения IP, найти таким образом в ручную его можно. Но написанный код,того же алгоритма, написанный на QT не работает.


Цитировать
Может есть более разумный способ ?
Этот вопрос можно и туда задать... С этим согласен.
Записан
BaltikS
Гость
« Ответ #3 : Октябрь 21, 2009, 07:10 »

Цитировать
Почему мой запрос QT не видит. Точнее не выдает результат. Для выводов " show" какие то другие методы нужно использовать ?
Например SHOW TABLES работает замечательно....
« Последнее редактирование: Октябрь 21, 2009, 07:14 от BaltikS » Записан
BaltikS
Гость
« Ответ #4 : Октябрь 21, 2009, 07:17 »

Да ещё, заметил одну вещь..... Попробу сделать так:
Код
C++ (Qt)
int CreateDB(){
   QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL");
   db.setDatabaseName("mydb");
   db.setUserName("myuser");
   db.setPassword("mypassword");
   db.setHostName("192.168.1.2");
   if( !db.open() )   qDebug() << db.lastError();
 
   QString conn_id;
   QSqlQuery query(QSqlDatabase::database("daninet"));
 
   if(!query.exec("select CONNECTION_ID()")){
       QMessageBox::critical(0, QObject::tr("SQL Error"), query.lastError().text());
       return 1;
   }
   query.first();
   conn_id=query.value(0).toString();
   query.clear();
 
   qDebug() << conn_id;
 
   QSqlQuery q(QSqlDatabase::database("daninet"));
   if(!q.exec("SHOW PROCESSLIST")){
       QMessageBox::critical(0, QObject::tr("SQL Error"), q.lastError().text());
       return 1;
   }
 
   while (q.next()) {
       qDebug() << q.value(0).toString();
       if (q.value(0).toString() == conn_id) operHost=q.value(2).toString();
   }
 
   query.clear();
 
   return 0;
}
 
 
Записан
admsasha
Гость
« Ответ #5 : Октябрь 21, 2009, 09:28 »

Тоже самое
Записан
BaltikS
Гость
« Ответ #6 : Октябрь 21, 2009, 09:32 »

Ещё момент. Что такое daninet ?
Вообще у вас написано что это псевдоним... А при соединении он нигде не фигурирует... Попробуйте ещё изменить строку QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL", "daninet");
Записан
admsasha
Гость
« Ответ #7 : Октябрь 21, 2009, 09:36 »

Ещё момент. Что такое daninet ?
Вообще у вас написано что это псевдоним... А при соединении он нигде не фигурирует... Попробуйте ещё изменить строку QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL", "daninet");
упс, это должно быть так
QSqlQuery query(QSqlDatabase::database("mydb"));

Не всё перекрасил :-D
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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