Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа в Qt с БД Postgreesql, Перевод QString в char* 
V
    Опции темы
plica98
Дата 20.3.2012, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 12.3.2012

Репутация: нет
Всего: нет




M
JackYF
Пользуемся кнопкой "код".

Уважаемые Qt-шники, нужна помощь начинающему.

При работе с БД (QSqlDatabase) получаю поле записи в Qstring, а мне надо преобразовать в
 
обычный массив char* m.


Заранее благодарю за помощь.



Код

void createConnectiom()
{
    QSqlDatabase db=QSqlDatabase::addDatabase("QPSQL");
    db.setDatabaseName("mydb");
    db.setUserName("m12");
    db.setHostName("localhost");
    db.setPassword("12345");
    if (!db.open()) { qDebug() << "Cannot Open database mydbb:" << db.lastError();
        exit(-1);
                 }
    else    { qDebug() << "Open database mydb - Ok!";
                 };


    QSqlQuery query;
    char zapr[1024], *m;
    QString u;
    int i,k;


 for(i=0;i<10;i++) {

    sprintf(zapr,"select * from TAB where num=%d;",i);     // подготовка запроса
    if (!query.exec(zapr))
        {
            qDebug() << "SELECT from TAB - BAD!";
            exit(-1);
        }

    QSqlRecord rec = query.record();
    query.next();

    m=query.value(rec.indexOf("name")).toByteArray().data();      //      Перевод  QString в char*


            station[i].name =(char *) malloc (strlen(m)+ 1);
                    if (!station[i].name)
                                {
                                    qDebug() << ("Memory allocation for name station ERR");
                                    exit (-1);
                                }

            strcpy (station[i].name,m);

                }
}





Это сообщение отредактировал(а) plica98 - 21.3.2012, 10:46
PM MAIL   Вверх
Artemon
Дата 20.3.2012, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 2
Всего: 20



.toAscii().data();

Это сообщение отредактировал(а) Artemon - 20.3.2012, 20:22


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
borisbn
Дата 20.3.2012, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



plica98, тип этого m - char. адын, саффсем адын char, а не char*
просто так присваивать .toAscii().data(); к char* нельзя, т.к. toAscii() возвращает временный объект. data() получает указатель на него, и после этой строчки m указывает в никуда. Если уж так необходим указатель, то .toAscii().data() нужно сразу передавать в функцию, которая требует char*. Если же этот указатель нужно сохранить, то нужно выделить под строку память и скопировать туда данные QString'а. После этого нужно не забыть удалить память.
Код

QString str = ...;
/* 1 */ func_need_char_star( str.toAscii().data() );
/* 2 */ 
char * m = new char[ str.length() + 1 ];
strcpy( m, str.toAscii().data() );
/* using m */
delete [] m;


P.S. мне лично больше нравится qPrintable( str )


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
plica98
Дата 21.3.2012, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 12.3.2012

Репутация: нет
Всего: нет



Уважаемые Qt-шники, сделал через  .toByteArray().data();      

    m=query.value(rec.indexOf("name")).toByteArray().data();      //      Перевод  QString в char*


Только теперь не понимает русских букв.
С кодировкой помогите.

 Кириллица KOI8R

Это сообщение отредактировал(а) plica98 - 21.3.2012, 11:01
PM MAIL   Вверх
borisbn
Дата 21.3.2012, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(plica98 @  21.3.2012,  10:50 Найти цитируемый пост)
Только теперь не понимает русских букв.

Ты тоже ? Я тебе говорил
Цитата(borisbn @  20.3.2012,  22:21 Найти цитируемый пост)
просто так присваивать .toAscii().data(); к char* нельзя,


В какой кодировке данные в БД ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
plica98
Дата 21.3.2012, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 12.3.2012

Репутация: нет
Всего: нет






Кириллица KOI8R

PM MAIL   Вверх
plica98
Дата 21.3.2012, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 12.3.2012

Репутация: нет
Всего: нет



Всем большое Спасибо - Разобрался.


    QTextCodec* codec = QTextCodec::codecForName("UTF8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForCStrings(codec);
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.