Поиск:

Ответ в темуСоздание новой темы Создание опроса
> soci bad_cast, soci bad_cast  
V
    Опции темы
Sahab
Дата 13.6.2011, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Делаю по доке:

Код

struct test {
    unsigned long long _ull;
    long long _longlong;
    double _double;
};

namespace soci
{
template<>
struct type_conversion<test>
{
    typedef values base_type;
    static void from_base(values const & v, indicator /* ind */, test & p)
    {
        p._ull = v.get<unsigned long long>("_ull");
        p._longlong = v.get<long long>("_longlong");
        p._double = v.get<double>("_double");
    }
    static void to_base(const test & p, values & v, indicator & ind)
    {
        v.set("_ull", p._ull);
        v.set("_longlong", p._longlong);
        v.set("_double", p._double);
        ind = i_ok;
    }
};
}

int main(int , char **)
{
    soci::session sql(soci::sqlite3, "dbname=test.db");
    test _test = { 64ULL, 32LL, 2.0d };
    soci::row r;

        try {
        sql << "insert into test (_ull, _longlong, _double) values(:_ull, :_longlong, :_double)", soci::use(_test);
                sql << "select * from test", into(r);
        std::ostringstream doc;
        doc << "<row>" << std::endl;
        for(std::size_t i = 0; i != r.size(); ++i)
        {
            const soci::column_properties & props = r.get_properties(i);

            doc << '<' << props.get_name() << '>';

            switch(props.get_data_type())
            {
            case soci::dt_string:
                doc << "std::string=" <<  r.get<std::string>(i);
                break;
            case soci::dt_double:
                doc << "double=" << r.get<double>(i);
                break;
            case soci::dt_integer:
                doc << "int=" << r.get<int>(i);
                break;
            case soci::dt_unsigned_long:
                doc << "unsigned long=" << r.get<unsigned long>(i);
                break;
            case soci::dt_long_long:
                doc << "long long=" << r.get<long long>(i);
                break;
            case soci::dt_unsigned_long_long:
                doc << "unsigned long long=" << r.get<unsigned long long>(i);
                break;
            case soci::dt_date:
                std::tm when = r.get<std::tm>(i);
                doc << "std::tm=" << asctime(&when);
                break;
            }

            doc << "</" << props.get_name() << '>' << std::endl;
        }
        doc << "</row>";

        std::cout << doc.str() << std::endl;

        sql << "select * from test", soci::into(_test);
        std::cout << _test._ull << std::endl;

    } catch (const std::exception& e) {
        std::cout << "[exception] " << e.what() << std::endl;
    }
    return 0;
}


в базе - INTEGER, REAL
при Загрузке из базы unsigned long long _ull; long long _longlong; определяются как int и бросается std::bad_cast

в чем проблема?

PM MAIL   Вверх
Sahab
Дата 14.6.2011, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Решение найдено, другим умным челом.
Необходимо было юзать другие типы sqlite 
Код

_ull UNSIGNED BIG INT, _longlong BIGINT, _double REAL

я же ориентировался этим хотя и были помысли попробовать другие типы... (жаль что только помыслы)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.