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