Необходимо создать вторичный ключ (индекс) по полю в записи. для этого создал 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.