Russian Qt Forum

Qt => Базы данных => Тема начата: levcom от Январь 31, 2012, 15:18



Название: Berkeley DB и QString
Отправлено: levcom от Январь 31, 2012, 15:18
Необходимо создать вторичный ключ (индекс) по полю в записи.  для этого создал secondary database с необходимыми атрибутами и ассоциировал ее с первичной базой. И создал функцию для выделения ключа из записи

Код:
int getname (Db *secondary, const Dbt *pkey, const Dbt *pdata, Dbt *skey)
{
    memset(skey, 0, sizeof(DBT));
    Record item;
    QByteArray block((char*)pdata->get_data(), pdata->get_size());
    QDataStream in(&block, QIODevice::ReadOnly);
    in >> item;

    skey->set_data((char*)item.name().data());
    skey->set_size(item.name().capacity() + 1);
    return (0);
}

где Record - класс объекта данных с полем name() типа QString (по которому и создается ключ).

функции поиска по ключу передается также QString
Код:
        Dbt key((char *)value.data(), (u_int32_t)value.capacity() + 1);
        Dbt data;

        int ret = cursorp->get(&key, &data, DB_SET);

Поиск результатов не дает (значение: -30988).

При просмотре ключей из базы возвращает ерунду.

Может кто-нибудь имел дело с Qstring и Berkeley DB.  ???