2009-07-16 5 views
2

Im obtenir une erreur "pas une erreur" sur iPhone SDK, j'ai passé une journée entière à essayer de le résoudre. SQLite version 3.4.0sqlite3 erreur "pas une erreur" sur iPhone SDK

sqlite3_step(compiledStatement) 

La table que j'utilise dans la requête a une seule ligne. Il renvoie 100 ..?

sqlite3_errmsg(database) 

Cette ligne me donne l'erreur ci-dessus.

J'ai créé une base de données et des tables avec des commandes de terminal, et placé dans le dossier des ressources de l'application ainsi que dans le chemin des documents, ce qui est fait dynamiquement.

while(sqlite3_step(compiledStatement) == SQLITE_ROW) 

Ce ne boucles exécute dans mon code, à l'intérieur duquel je reçois toutes les valeurs.

Je pense que cette information est suffisante, faites le moi savoir. Quelqu'un sait où j'ai des problèmes ..?

merci d'avance

Répondre

1

Le problème que vous rencontrez est que vous vous attendez à ce que sqlite3_step renvoie la valeur de l'instruction compilée. Il ne le fait pas, il renvoie un code d'erreur, dans ce cas 100 (SQLITE_ROW), ce qui signifie que la requête a réussi et il peut y avoir plus de données, donc vous devriez appeler le sqlite3_step une fois que vous avez fini les données de cette étape la requête.

Si vous souhaitez voir les données renvoyées réellement de cette étape de requête, vous devez utiliser les diverses API sqlite3_column pour extraire les données de l'étape.

+0

J'avais déjà utilisé sqlite3_step() pour trouver la valeur de retour de celui-ci (100), car la boucle while ne fonctionnait pas avec cette méthode. Tout ce que j'avais, c'était seulement une ligne et que la boucle n'était jamais exécutée, c'est évident maintenant. Un sqlite3_reset() entre les deux lignes a bien fonctionné. Merci à vous deux .. \ m/ Maintenant, le codage des caractères est quelque chose d'illisible pour sqlite3_column_text même lorsque j'ai utilisé 'NSString stringWithUTF8String'. Merci – pMan

+0

salut pMan, pouvez-vous me montrer votre code de mise à jour, alors vous pouvez résoudre ce problème ?? –

3

C'est en fait assez simple. Jetez un oeil à la documentation of sqlite3_step. Fondamentalement, SQLITE_ROW vous indique qu'il a terminé avec succès et qu'une autre ligne peut être récupérée en appelant à nouveau sqlite3_step. Pour la dernière ligne, tout ce que vous obtenez est SQLITE_DONE, ce qui se traduira par "pas une erreur".