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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Sqlite. форматированный вывод  (Прочитано 4959 раз)
johnpion
Гость
« : Май 01, 2012, 17:05 »

Храню денежный значения в виде копеек, т.е. int в базе данных.
Нужно при запросе использовать
Код:
SELECT money(suma) FROM doc WHERE id = '54'
, получать значения в денежном формате
Для обычных запросов писал велосипед функцию:
Код:
QString money(QString sum = 0){
    int in = 0, b = 0;
    double flt = sum.toDouble();
    QString value, fl;
    in = flt / 1;
    b = int (100 * (flt - in));
    if (b == 0){
        fl = ",00";
    } else if (b > 0 && b < 10){
        fl = ",0" + QVariant(b).toString();
    } else if (b >= 10 && b <= 99) {
        fl = "," + QVariant(b).toString();
    }

    value = QVariant(in).toString() + fl;
    return value;
}
Но это очень не удобно, когда много раз нужно использовать этот сложный запрос.
Как можно использовать что-то типа sqlite3_create_function для этой задачи, чтобы использовать его в других запросах?
« Последнее редактирование: Май 29, 2012, 09:17 от johnpion » Записан
JayFOX
Гость
« Ответ #1 : Май 01, 2012, 20:38 »

Код:
SELECT ROUND(suma/1,2) FROM doc WHERE id = '54'
подойдет?
Записан
johnpion
Гость
« Ответ #2 : Май 01, 2012, 20:41 »

В таком варианте 34,50 будет отображаться как 34,5
Записан
JayFOX
Гость
« Ответ #3 : Май 01, 2012, 20:44 »

Проверял вот тут http://sqlzoo.net/howto/source/z.dir/tip177276/sqlite, 34.50 норм.
Записан
johnpion
Гость
« Ответ #4 : Май 01, 2012, 21:10 »

На вашей ссылке действительно работает как надо, только там запросы идут к MySQL, а не SQLite
Код:
SELECT version()

Победил! Решил с помощью своей модели.
Информацию взял на http://doc.crossplatform.ru/qt/4.3.2/qt4-sql.html

Вот header:
Код:
#ifndef SQLQUERYMODEL_H
#define SQLQUERYMODEL_H

#include <QSqlQueryModel>

class SqlQueryModel : public QSqlQueryModel
{
public:
    SqlQueryModel(QObject *parent = 0){}

private:
    QString money(double sum = 0){
        int in = 0, b = 0;
        QString value, fl;
        in = sum / 1;
        b = int (100 * (sum - in));
        if (b == 0){
            fl = ",00";
        } else if (b > 0 && b < 10){
            fl = ",0" + QVariant(b).toString();
        } else if (b >= 10 && b <= 99) {
            fl = "," + QVariant(b).toString();
        }
    
        value = QVariant(in).toString() + fl;
        return value;
    }
    
    QVariant data(const QModelIndex &item, int role) const{
        QVariant value = QSqlQueryModel::data(item, role);
        if (!value.isValid())
            return QVariant();
        if (role == Qt::DisplayRole){
            if (item.column() == 4){ //колонка, в которой валюта
                return money(value.toDouble());
            }
        }
        return value;
    }
};

#endif

Как можно реализовать это в sqldriver'е?
Подобное видел на termit-personal.blogspot.com/2010/09/qt-sqlite.html

Получилось реализовать для sqlite3.exe через .load
Не могу заставить этот код работать в моем проекте
« Последнее редактирование: Май 29, 2012, 09:19 от johnpion » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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