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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt, MySQL дальнейшее развитие  (Прочитано 4616 раз)
bob
Гость
« : Ноябрь 01, 2005, 21:09 »

Ситуация следующая:
Первые три записи добавлены в ТБД непосредственно из shell MySQL после команды SET NAMES utf8.
Последняя добавлена из программы написанной на Qt с переданным вБД параметром SET NAMES utf8.
При установке SET NAMES utf8 в shell MySQL первые три записи
отображаются правильно, последняя отображается нечитабельными
символами (кодировку менял на все которые только поддерживает MySQL).
При просмотре ТБД из программы написанной на Qt ни одна запись не
отображается правильно. В заголовке окна выведен текст для того чтобы быть уверенным, что локаль установлена в ср1251.
Все вышеописанное запускается под управлением WindowsXP.
Код:

#include "vwdb.h"
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QTextStream>
#include <QTranslator>


ViewDB::ViewDB(QWidget *parent): QWidget(parent)
{
  setupUi(this);

  connectionDB();

  model = new QSqlTableModel(this);
  model->setTable("TestTable");
  model->setEditStrategy(QSqlTableModel::OnManualSubmit);
  model->select();

  model->setHeaderData(0, Qt::Horizontal, tr("Идентификатор"));
  model->setHeaderData(1, Qt::Horizontal, tr("Статус"));

  tvwView->setModel(model);
}


void ViewDB::connectionDB()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("TestDB");
    db.setUserName("root");
    db.setPassword("rootpass");

    db.open();

    QSqlQuery query;
    query.exec("SET NAMES utf8");
    query.exec("SELECT* FROM TestTable");    
    query.next();

    codec=QTextCodec::codecForName("utf8");
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);

    query.prepare("INSERT INTO TestTable (id, status) "
                  "VALUES (:id, :status)");
    query.bindValue(":id", 40);
    query.bindValue(":status", "Гость");
    query.exec();

    setWindowTitle("Текст в ср1251");
}
Записан
oktogen
Гость
« Ответ #1 : Ноябрь 02, 2005, 14:46 »

Попробуй по
этому методу.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Ноябрь 02, 2005, 15:29 »

чел создал новый топик, он уже отчаялся найти решение
и ему указали на его же топик

я уже выдохся, идей больше нет
Записан
oktogen
Гость
« Ответ #3 : Ноябрь 02, 2005, 15:39 »

Пардон, перепутал ветки .
Думал, что нашел лекарство , ан нет.
Попытался прикрутить к своему проекту ,ессесн,  не заработало.
Ситуевина у меня абсолютно такая же, только версия мускула 5(стоит на винде,пока что не пробовал на линухе)
Найду решение - выложу детали.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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