2009-12-09 8 views
3

Je travaille avec sqlite3 pour la première fois et je n'arrive pas à le vérifier correctement avant de l'ouvrir. Jusqu'à présent, sqlite renvoie toujours OK sur n'importe quel fichier.sqlite3_open - problèmes de vérification si un fichier est une base de données sqlite3

En outre, le nom de fichier est une variable renvoyée par le sélecteur de fichier GTK. Il retourne un chemin absolu, je suppose que ce n'est pas un problème.

Merci pour toute aide.

C'est un extrait du code:

int rc; 
char *filename; 
sqlite3 *db; 

filename = gtk_file_chooser_get_filename(etc.); 

if(SQLITE_OK == rc = sqlite3_open(filename,&db)) 
{ etc. } 

Répondre

5

sqlite3_open ne lit pas réellement le fichier jusqu'à ce que la première déclaration non pragma est préparé.

sqlite3_open_v2 fournit d'autres options.

-1

Est-ce que votre code compilez?
Je crois que c'est une erreur

if (SQLITE_OK == rc = sqlite3_open(filename,&db)) { /* ... */ } 

c'est la même que

if ((SQLITE_OK == rc) = sqlite3_open(filename,&db)) { /* ... */ } 

et vous ne pouvez pas affecter quelque chose (le résultat de l'appel sqlite3_open()) à (SQLITE_OK == rc).

Essayez ceci:

if ((rc = sqlite3_open(filename,&db)) == SQLITE_OK) { /* ... */ } 
/* or, if you really want the constant on the left side of the comparison */ 
if (SQLITE_OK == (rc = sqlite3_open(filename,&db))) { /* ... */ } 
+0

Merci pour le conseil. Il compile, mais l'exemple était mal écrit. Les premiers rc et db sont définis sur NULL, puis la connexion est effectuée. Après cela, les valeurs renvoyées sont vérifiées. –

+0

@laalto: C'est ce que j'ai dit. '0 == x = fx()' est analysé comme '(0 == x) = fx()' et vous ne pouvez pas affecter '(0 == x)'. – pmg

+0

[http://codepad.org/r7uQCSxZ] – pmg

Questions connexes