Russian Qt Forum

Qt => Базы данных => Тема начата: Antiglobalist от Ноябрь 12, 2010, 09:55



Название: Qt + русский текст
Отправлено: Antiglobalist от Ноябрь 12, 2010, 09:55
Подскажите как работать с русским текстом в коде?При вводе такого имени базы подключение не проходит
Код:
    db.setDatabaseName("Справочник");
    db.setUserName("root");
    db.setPassword("1234567");
Тоже самое и с запросами
Код:
query.exec("insert into per values(102, 'Иван', 'Петров')");
В базе ничего не появляется ...
С латинскими всё нормально.


Название: Re: Qt + русский текст
Отправлено: Пантер от Ноябрь 12, 2010, 10:01
Не используй кирилицу в коде.
db.setDatabaseName(tr ("Reference"));
И потом переводишь.


Название: Re: Qt + русский текст
Отправлено: UVV от Ноябрь 12, 2010, 10:17
> db.setDatabaseName("Справочник");
> query.exec("insert into per values(102, 'Иван', 'Петров')");
За это по рукам линейкой давать надо...


Название: Re: Qt + русский текст
Отправлено: Antiglobalist от Ноябрь 12, 2010, 10:56
Написал
Код:
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName(QObject::tr("Reference"));
    db.setUserName("root");
    db.setPassword("1234567");
Но в базу так и не зашло , быть может тут уже проблема в кодировке?Или я что то не так понял ...
База MySQL кодировка сервера cp1251
При работе в ней через командную строку русский текст не отображает , приходится прописывать set name cp866(Dos-Russia)


Название: Re: Qt + русский текст
Отправлено: Пантер от Ноябрь 12, 2010, 11:03
1. Читай про локализацию в Qt.
2. Не стоит давать БД название на кирилице.


Название: Re: Qt + русский текст
Отправлено: Denjs от Ноябрь 12, 2010, 11:45
Написал
Код:
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName(QObject::tr("Reference"));
    db.setUserName("root");
    db.setPassword("1234567");
Но в базу так и не зашло , быть может тут уже проблема в кодировке?Или я что то не так понял ...
База MySQL кодировка сервера cp1251
При работе в ней через командную строку русский текст не отображает , приходится прописывать set name cp866(Dos-Russia)
1) "MySQL кодировка сервера cp1251" -> use UTF-8, Dude.
2) "Но в базу так и не зашло" -> Какие _именно_ ошибки? вы Qt-MySQL плагин собирали?
3) После того как убедитесь что ваши исходники в UTF-8, на всякий случай добавьте в код
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCString(QTextCodec::codecForName("UTF-8"));
4) "При работе в ней через командную строку русский текст не отображает, приходится прописывать set name cp866(Dos-Russia)" -> уж не потому ли что консоль в венде до сих пор в досовской кодировке? это к делу в общем не относится. теоретически можно сделать аналогичный запрос в программе, но с UTF-8 - потому что кодировка всех QString "внутри" - UTF-8.
где-то так.


Название: Re: Qt + русский текст
Отправлено: BRE от Ноябрь 12, 2010, 13:06
потому что кодировка всех QString "внутри" - UTF-8.
где-то так.
Внутри QString не UTF8. ;)


Название: Re: Qt + русский текст
Отправлено: Denjs от Ноябрь 12, 2010, 13:47
потому что кодировка всех QString "внутри" - UTF-8.
где-то так.
Внутри QString не UTF8. ;)
ну подумаешь спутал "Unicode Character string" c UTF-8))) каюсь-каюсь)


Название: Re: Qt + русский текст
Отправлено: tim474 от Ноябрь 12, 2010, 20:20
А саму базу данных в UTF8 перевести возможности нету?


Название: Re: Qt + русский текст
Отправлено: Antiglobalist от Ноябрь 13, 2010, 00:37
Возможности безграничны)Пишу лабу "Телефнный сравочник".
Нужно чтобы данные в таблицах были на русском языке а остальные пофиг ...
Раньше просто не приходилсь в Qt работать с базой.
Советуете базу перевести в utf8 и так работать?

Плагины собраны , запрос типа
Код:
query.exec("create table per(id int primary key, "
                   "firstname varchar(20), lastname varchar(20));");
Проходит отлично , если же ввести в этом запросе что нить с русским , возвращает false
Пробывал сделать запрос таким спосбом
Код:
    QString str,strF = "insert into table per(id, firstname, lastname)"
                  "values(%1,'%2','%3');";
    str=strF.arg("25")
            .arg("Show")
            .arg("Call");
    if(!query.exec(str))
Тоже false.
А через бинВалуе
Код:
    query.prepare("Insert into per(id, firstname, lastname) values(:id,:firstname,:lastname);");
    query.bindValue(":id",25);
    query.bindValue(":firstname","qwer");
    query.bindValue(":lastname","OLOL")
Выдает на каждую строку по ошибке No matching function


Название: Re: Qt + русский текст
Отправлено: tim474 от Ноябрь 13, 2010, 03:08
А setCodecForCStrings не помогает?


Название: Re: Qt + русский текст
Отправлено: Antiglobalist от Ноябрь 13, 2010, 07:13
Спасибо всем , решил проблему =)


Название: Re: Qt + русский текст
Отправлено: Пантер от Ноябрь 13, 2010, 08:28
Antiglobalist: у нас принято рассказывать как решил проблему.


Название: Re: Qt + русский текст
Отправлено: mapron от Ноябрь 13, 2010, 13:22
у меня была та же проблема , решается QString::fromUtf8("русскыя буковы");
Все дело втом, что в QString данные хранятся, не в UTF-8 а в UCS-2.
Для получения этой строки из других форматов имеются статичные члены.
Надо читать маны чуть-чуть :)


Название: Re: Qt + русский текст
Отправлено: Antiglobalist от Ноябрь 16, 2010, 16:00
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
Прописал не после QAp а в другом файле перед созданием подключения.
В этом и были все проблемы.


Название: Re: Qt + русский текст
Отправлено: Danila_Bagrofff от Декабрь 21, 2010, 16:29
добавлю еще свои 5 копеек...
Тоже долго возился с проблемой кодировки.
Использовал не QMYSQL подключение, а через QODBC, при этом скачал свежий коннектор. И проблема отпала!
Удачи и вам!


Название: Re: Qt + русский текст
Отправлено: crossly от Декабрь 21, 2010, 16:57
ИМХО костыль...