2011-10-05 4 views
2

J'ai une base de données sqlite existante. Je tente d'améliorer les performances de la requête en utilisant un index. J'utilise aussi un wrapper C++ pour sqlite. La valeur de retour est SQLITE_ERROR à partir de l'appel sqlite3_exec ci-dessous.sqlite CREATE INDEX exec renvoyer une erreur

code wrapper

est comme suit pour effectuer exec:

Int CppSQLite3DB::execDML(const char* szSQL) 
{ 
checkDB(); 

char* szError=0; 

int nRet = sqlite3_exec(mpDB, szSQL, 0, 0, &szError); 

if (nRet == SQLITE_OK) 
{ 
    return sqlite3_changes(mpDB); 
} 
else 
{ 
    throw CppSQLite3Exception(nRet, szError); 
} 
} 

mon code pour créer l'index est:

sprintf_s(statement, sizeof(statement), "CREATE INDEX modeidx ON Models (manufID)"); 
flDB->execDML(statement); 

La base de données est ouverte et valide. Cette section de code est effectuée suite à une section précédente qui lit une autre table dans cette base de données. Avant d'ajouter cette instruction, tout le code fonctionne comme prévu.

Je crois que ma syntaxe est correcte pour créer un index, je ne comprends pas pourquoi je reçois une erreur.

+0

Quel est le type de la variable 'instruction'? En fait, il n'y a aucune raison d'utiliser un tampon intermédiaire pour l'instruction SQL. – grep

+0

Vous pouvez vérifier votre relevé en saisissant le code SQL directement à l'aide, par ex. le [sqlite firefox addon] (http://code.google.com/p/sqlite-manager/). Juste pour vous assurer que votre déclaration est correcte. – nabulke

+0

Imprimez ou analysez dans un débogueur le contenu de * szError. Cela donnera une indication du problème. – ravenspoint

Répondre

0

Assurez-vous qu'un index portant ce nom n'existe pas déjà. Essayez: CREER INDEX SI NON EXISTS modeidx ON Modèles (manufID)

... et de voir si vous obtenez toujours une erreur.