crossplatform.ru

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


  Ответ в Qt и mysql++ (ошибка сегментирования)
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
tin_gimranoff Дата 20.10.2010, 10:27
 
Цитата(BRE @ 20.10.2010, 8:10) *
Цитата(tin_gimranoff @ 19.10.2010, 23:37) *
А вообще мне надо заюзать под Linux QT и законектиться к базе. Я нашёл тока mysql++ может быть есть ещё что нить для плюсов для работы с базами?

А документацию по Qt почитать не получилось? ... на тему "QtSql Module"




Спс, как раз вчера пересобрал Qt c поддержкой этого модуля. Просто первое что я нашёл это было MySQL++ и решил поюзать его.

Цитата(Алексей1153 @ 20.10.2010, 11:21) *
tin_gimranoff, это потому, что сохраняешь указатель на локальные данные

ошибка тут
    const char* HostName = this->ConvertToChar(ui->HostName->text()); 
    const char* UserName = this->ConvertToChar(ui->UserName->text());
    const char* UserPass = this->ConvertToChar(ui->UserPass->text());


text() возвращает QString, созданный на стеке. Ты берёшь адрес начала данных. Затем, по выходу из функции объект убивается, а указатель указывает на невалидные данные - и где-то потом, в обработчике сообщения кто-то пытается получить доступ к этому мусору

тут выход такой:сделать

QString HostName
QString UserName
QString UserPass

членами класса (new_connect , например) . Можно даже в одну структурку их определить. Так решится проблема потери валидности данных



Спс, сегодня попробую, если получится то буду юзаться всё же Mysql++ вместо QtSql
Алексей1153 Дата 20.10.2010, 10:21
  tin_gimranoff, это потому, что сохраняешь указатель на локальные данные

ошибка тут
    const char* HostName = this->ConvertToChar(ui->HostName->text()); 
    const char* UserName = this->ConvertToChar(ui->UserName->text());
    const char* UserPass = this->ConvertToChar(ui->UserPass->text());


text() возвращает QString, созданный на стеке. Ты берёшь адрес начала данных. Затем, по выходу из функции объект убивается, а указатель указывает на невалидные данные - и где-то потом, в обработчике сообщения кто-то пытается получить доступ к этому мусору

тут выход такой:сделать

QString HostName
QString UserName
QString UserPass

членами класса (new_connect , например) . Можно даже в одну структурку их определить. Так решится проблема потери валидности данных
tin_gimranoff Дата 20.10.2010, 10:16
  [quote name='Алексей1153' date='20.10.2010, 7:02' post='41509']
tin_gimranoff, а ты уверен, что косяк именно в этом месте ? А вот сделай так (это исключает наличие ошибки в этом месте):
if(!test_connect.connect("information_schema", "localhost","имяюзера","парольюзера", DataBasePort))


Так пробовал работает. Но стоит вместо статических значений запихнуть переменные, вылетает, соответственно ошибка именно в этой строке.



BRE Дата 20.10.2010, 7:10
 
Цитата(tin_gimranoff @ 19.10.2010, 23:37) *
А вообще мне надо заюзать под Linux QT и законектиться к базе. Я нашёл тока mysql++ может быть есть ещё что нить для плюсов для работы с базами?

А документацию по Qt почитать не получилось? ... на тему "QtSql Module"
Алексей1153 Дата 20.10.2010, 6:02
  tin_gimranoff, а ты уверен, что косяк именно в этом месте ? А вот сделай так (это исключает наличие ошибки в этом месте):
if(!test_connect.connect("information_schema", "localhost","имяюзера","парольюзера", DataBasePort))


Цитата(tin_gimranoff @ 20.10.2010, 1:37) *
и законектиться к базе.

тип базы - ? От способ подключения к базе не зависит от языка программирования
tin_gimranoff Дата 19.10.2010, 22:37
 
Цитата(Алексей1153 @ 19.10.2010, 20:18) *
Цитата(tin_gimranoff @ 19.10.2010, 20:28) *
проект вылетает вместе с QtCreator'ом

прям с креатором ? Сильно! Пиши разработчикам о глюке :)


а так если
if(!test_connect.connect("information_schema", ui->HostName->text(), ui->UserName->text(), ui->UserPass->text(), DataBasePort))





А так он ругается вообще на несовместимость типов, т.к. connect требует в качестве аргументов const* char, а в QT объекты обрабатывают строки как я понимаю в QString


А вообще мне надо заюзать под Linux QT и законектиться к базе. Я нашёл тока mysql++ может быть есть ещё что нить для плюсов для работы с базами?
Алексей1153 Дата 19.10.2010, 19:18
 
Цитата(tin_gimranoff @ 19.10.2010, 20:28) *
проект вылетает вместе с QtCreator'ом

прям с креатором ? Сильно! Пиши разработчикам о глюке :)


а так если
if(!test_connect.connect("information_schema", ui->HostName->text(), ui->UserName->text(), ui->UserPass->text(), DataBasePort))

tin_gimranoff Дата 19.10.2010, 17:28
  Всем доброго времени суток. Помогите плз... пишу вот такой код:
void new_connect::on_CheckButton_clicked()
{
    const char* HostName = this->ConvertToChar(ui->HostName->text());
    const char* UserName = this->ConvertToChar(ui->UserName->text());
    const char* UserPass = this->ConvertToChar(ui->UserPass->text());
    int DataBasePort = ui->PortNumber->text().toInt();

    mysqlpp::Connection test_connect;

    if(!test_connect.connect("information_schema", HostName, UserName, UserPass, DataBasePort))
    {
       //код

    }
    else
    {
       //код
    }

}


И когда дело доходит до этого события то проект вылетает вместе с QtCreator'ом с ошибкой сегментирования. Причём точно знаю что ошибку вызывает строка
if(!test_connect.connect("information_schema", HostName, UserName, UserPass, DataBasePort))

Почему так происходит, объясните плз, и как это дело исправить?

Заранее СПС!!!!
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 6:46