2014-07-15 2 views
0

Je suis nouveau dans les bases de données et j'ai écrit ce programme d'entraînement pour tester Berkeley BDB. Je reçois des difficultés à ouvrir l'environnement - l'erreur apparaît dans ma console et dit:Problème d'ouverture de l'environnement DB dans Oracle Berkeley DB

testEnv\_db.001: No such file or directory 
Error opening database environment 
DbEnv::open: No such file or directory 

Le code du programme de la console est fortement basée au large des exemples dans le Berkeley DB guide de transactions, et voici le texte de la programme jusqu'à l'erreur, sous int main().

String^ key_allkeys = "_ALLKEYS"; 
String^ key_valcount = "_COUNT"; 

// 1. Print some information to the screen, prompt user to enter path for key-value pair location: 
Console::WriteLine("Oracle Berkeley DB Example Database Creator"); 
Console::WriteLine(); 
Console::WriteLine("Enter the path to the text file of key-value pairs:"); 
String^ kv_path = Console::ReadLine(); 

// 2. Declare initial variables: 
String^ totalkeys; 
int totalval; 

// 3. Open the database: 
u_int32_t env_flags = DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN; 
std::string envHome("testEnv"); 
u_int32_t db_flags = DB_CREATE | DB_AUTO_COMMIT; 
Db *dbp = NULL; 
const char *file_name = "mydb.db"; 
DbEnv myEnv(0); 
try 
{ 
    myEnv.open(envHome.c_str(), env_flags, 0); 
    dbp = new Db(&myEnv, 0); 
    dbp->open(NULL, file_name, NULL, DB_BTREE, db_flags, 0); 
} 
catch(DbException &e) 
{ 
    std::cerr << "Error opening database environment: " << std::endl; 
    std::cerr << e.what() << std::endl; 
    exc_block(); // Block 
    return (EXIT_FAILURE); 
} 

Il devrait être assez évident que le programme ne parvient pas juste autour du try/catch blocs. J'ai lu le manuel (littéralement RTFM) et je ne pouvais pas le comprendre - l'indicateur DB_CREATE est spécifié pour l'environnement et la base de données, donc il ne devrait pas y avoir de problème ici.

Des idées?

Répondre

0

Il se peut simplement que le répertoire testEnv n'existe pas dans le répertoire où vous exécutez le programme? Vous devez créer le répertoire de base de l'environnement vous-même.

Vous pouvez également spécifier DB_RECOVER lors de l'ouverture de l'environnement.