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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Непонятки с кодировкой  (Прочитано 4436 раз)
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
Гость
« Ответ #1 : Декабрь 11, 2009, 11:51 »

Очень похоже на то, что у тебя сама база в другой кодировке (не Windows-1251). Попробуй сменить кодировку базы.
Записан
kadr
Гость
« Ответ #2 : Декабрь 11, 2009, 12:40 »

Очень похоже на то, что у тебя сама база в другой кодировке (не Windows-1251). Попробуй сменить кодировку базы.
нет база в кодировке cp1251_general_ci, но дело в том что он выдает такую бяку, до добавления в базу, то есть при чтении из файла, именно по этому и не добавляется в базу!
Записан
kadr
Гость
« Ответ #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 Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Декабрь 14, 2009, 11:10 »

kadr, надо в тэг code оборачивать, а то так и будем весёлые кртинки разглядывать
Записан

Юра.
voronElf
Гость
« Ответ #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]   Вверх
  Печать  
 
Перейти в:  


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