Russian Qt Forum
Ноябрь 01, 2024, 05:20
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Непонятки с кодировкой
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Непонятки с кодировкой (Прочитано 4534 раз)
kadr
Гость
Непонятки с кодировкой
«
:
Декабрь 11, 2009, 09:39 »
Что то непонятное происходит с кодировкой!
#include <QtCore/QCoreApplication>
#include "QFile"
#include "QDir"
#include "QDate"
#include "QTextCodec"
#include "QDebug"
#include "QSqlDatabase"
#include "QSqlQuery"
#include "QSqlError"
#include "QVariant"
int main()
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));
// Подключение к Базе Данных---------------------------------------------------------------------------------------------------
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("192.168.1.223");
db.setDatabaseName("farm_price");
db.setUserName("1c");
db.setPassword("1c");
db.open();
if (!db.isOpen())
{
qDebug() << "Bd is not open" << db.lastError().text() ;
}
QDir dir;
QString STR,str,tovar,r,apteka,path,code,line_date;
QStringList st;
QSqlQuery q;
QFileInfo inf;
QDate date;
QTextStream cas(stdin);// Ввод данных в консоль
int i,j;
double nac_ost,kon_ost,prih,real;
//----------------------------------------------------------------------------------------------------------------------------
qDebug() << "Enter date in format dd.MM.yyyy";
cas >> line_date;
STR.clear();
dir.setCurrent("\\\\192.168.1.223\\transfer\\real");
i = 0;
STR = QString("DELETE FROM real WHERE date = '%1'")
.arg(date.currentDate().toString("yyyy-MM-dd"));
q.exec(STR);
STR.clear();
q.clear();
if (dir.entryList(QStringList() << "*.txt").count() > 0)
{
while (i != dir.entryList(QStringList() << "*.txt").count())
{
path ="\\\\192.168.1.223\\transfer\\real\\"+dir.entryList(QStringList() << "*.txt").value(i);
inf = path.trimmed();
if (inf.lastModified().toString("dd.MM.yyyy") == line_date)
{
QFile file(dir.entryList(QStringList() << "*.txt").value(i));
qDebug() <<"First"<< dir.entryList(QStringList() << "*.txt").value(i);
r = dir.entryList(QStringList() << "*.txt").value(i);
r.left(3);
code.append(r+",");
r.clear();
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() <<file.errorString();
}
str.clear();
st.clear();
j = 0;
apteka = dir.entryList(QStringList() << "*.txt").value(i);// Занесение номера аптеки в переменную
while (!file.atEnd())
{
if (j < 4)
{
str = file.readLine().trimmed();
j++;
}
else
{
str = file.readLine().trimmed();
st = str.split("\t");
tovar = st.value(1); // Название и серия товараw
tovar.remove(tovar.indexOf("'"),1); //Удаление символа ' из строк если есть такие
tovar.replace(tovar.indexOf("\""),1,""); //Замена символа " на пробел
qDebug() << tovar.trimmed();
r.clear();
r = st.value(2);
nac_ost = r.toDouble();
r.clear();
r = st.value(3);
real = r.toDouble();
r.clear();
r = st.value(4);
prih = r.toDouble();
r.clear();
r = st.value(5);
kon_ost = r.toDouble(); // Конечный остаток
q.clear();
STR = QString("INSERT INTO real (apteka,name,nac_ost,real,prih,kon_ost,date) VALUES ('%1','%2',%3,%4,%5,%6,'%7')")
.arg(apteka.left(3))
.arg(tovar)
.arg(nac_ost)
.arg(real)
.arg(prih)
.arg(kon_ost)
.arg(date.currentDate().toString("yyyy-MM-dd"));
q.exec(STR);
//qDebug() <<q.lastError().text();
j++;
}
}
i++;
file.close();
}
else
{
i++;
}
}
}
//-----------------------------------------------------------------------------------------------------------------------------
// Формирование отчета и сохранение его в \\192.168.1.223\Transfer\otchet\otchet_all.csv
qDebug() << "Making otchet_real_all.csv";
STR.clear();
q.clear();
QFile file("\\\\192.168.1.223\\Transfer\\otchet\\otchet_real_all.csv");
file.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream out(&file);
STR = QString("SELECT name, SUM(nac_ost), SUM(real), SUM(prih), SUM(kon_ost) FROM real WHERE date = '%1' GROUP BY name")
.arg(date.currentDate().toString("yyyy-MM-dd"));
q.exec(STR);
out << "Apteki: "+code+"\n";
out <<"Tovars";
out <<";";
out <<"Nachal_Ostatok";
out <<";";
out <<"Realis";
out <<";";
out <<"Prihod";
out <<";";
out <<"Konich_Ostatok";
out <<"\n";
while (q.next())
{
out << q.value(0).toString();
out << ";";
out << q.value(1).toString();
out << ";";
out << q.value(2).toString();
out << ";";
out << q.value(3).toString();
out << ";";
out << q.value(4).toString();
out << ";";
out << q.value(5).toString();
out << "\n";
}
file.close();
return 0;
}
Вот что на выходе:
"▌эЄхЁюёухы№ ухы№ ф/яЁшуюЄ.ёєёяхэчшш яръхЄ 225у/ ╬╬╬ ╤шыьр ╥═╩ / ╨юёёш"
"▌Ётр °хЁёЄшёЄр ЄЁртр 50у / ╚трэ ╫рщ ╟└╬ ╨юёёш"
"▌Ёхёяры Єрс.я/ю 80ьу ╣30 / ╤хЁт№х / ╘ЁрэЎш"
"▌ЁшэшЄ Єрс.0.01 N50 / ╥рЄїшьЇрЁьяЁхярЁрЄ√ ╩╧╒╘╬/ ╨юёёш"
"▌ЁшЄЁюьшЎшэ Єрс.я/ю 0,1 ╣10 / ╤шэЄхч └╩╬ ╬└╬ у.╩єЁурэ ╨юёёш / ╨юёёш"
"▌ЁшЄЁюьшЎшэютр ьрч№ уырчэр 10000┼─ 10у / ╥рЄїшьЇрЁьяЁхярЁрЄ√ ╩╧╒╘╬ / ╨юёёш"
"▌ёяхЁры№ Єрс. 500ьу ╣20 ╤юЇрЁшьхъё ╚эфєёЄЁшр ╩шьшър ш ╘рЁьрЎхтЄшър ╦фр ╧юЁЄєу
«
Последнее редактирование: Декабрь 11, 2009, 17:32 от Dendy
»
Записан
Aleksey_Zh
Гость
Re: Не понятки с кодировкой!
«
Ответ #1 :
Декабрь 11, 2009, 11:51 »
Очень похоже на то, что у тебя сама база в другой кодировке (не Windows-1251). Попробуй сменить кодировку базы.
Записан
kadr
Гость
Re: Не понятки с кодировкой!
«
Ответ #2 :
Декабрь 11, 2009, 12:40 »
Цитата: Aleksey_Zh от Декабрь 11, 2009, 11:51
Очень похоже на то, что у тебя сама база в другой кодировке (не Windows-1251). Попробуй сменить кодировку базы.
нет база в кодировке cp1251_general_ci, но дело в том что он выдает такую бяку, до добавления в базу, то есть при чтении из файла, именно по этому и не добавляется в базу!
Записан
kadr
Гость
Re: Непонятки с кодировкой
«
Ответ #3 :
Декабрь 14, 2009, 10:45 »
Вот вывод lastError():
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'real (apteka,name,nac_ost,real,prih,kon_ost,date) VALUES ('151','
░
░' at line 1 QMYSQL: Unable to execute query"
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Непонятки с кодировкой
«
Ответ #4 :
Декабрь 14, 2009, 11:10 »
kadr, надо в тэг code оборачивать, а то так и будем весёлые кртинки разглядывать
Записан
Юра.
voronElf
Гость
Re: Непонятки с кодировкой
«
Ответ #5 :
Декабрь 15, 2009, 11:28 »
Для начала стоит стоит проверить что в таблице MySql тексты не кракозябрами лежат (а то был случай
)
а потом насколько я понимаю, кодеки ты создал, но их еще применить надо, так что при выборке из базы вместо
out << q.value(0).toString();
пиши что-то в стиле out << tr(q.value(0).toByteArray().data());
либо сразу ByteArray в файл: out << q.value(0).toByteArray();
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...