[Résolu]Query SQLite

SethySethy Membre
août 2011 modifié dans Objective-C, Swift, C, C++ #1
Bonjour à  tous,

J'ai un souci avec les querys élaborés SQLite3.

Je précise que je parviens bien à  atteindre la DB, car de simples queries comme celui-ci me donne "à  peu près" le bon résultat (j'y reviendrai) :

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sqlStatement = &quot;select * from Family;&quot;;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(sqlite3_prepare_v2(database, sqlStatement, -1, &amp;compiledStatement, NULL) == SQLITE_OK)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while(sqlite3_step(compiledStatement) == SQLITE_ROW)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TFamily *newFamily = [[TFamily alloc] init];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newFamily.familyID = (int) sqlite3_column_int(compiledStatement, 0);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newFamily.name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [families addObject:newFamily];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [newFamily release];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />


Par contre, dès que je veux faire un query plus complexe, je reçois systématiquement un ensemble de records vide.

Voici un exemple de query :

<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sqlStatement = &quot;select Locution.StringID, Language.Language, Locution.Locution from Language INNER JOIN Locution ON Language.LanguageID = Locution.LanguageID;&quot;;<br /><br />


Je précise que j'ai testé ce query dans la console à  l'aide de sqlite3 et que j'obtiens bien les résultats attendus.

Où est mon erreur ?

Doit-on utiliser une autre approche pour les queries avec des joins ?


Je reviens au premier souci avec le query fonctionnel. Je parviens à  récupérer tous les types de champs (int, double, string) mais visiblement celui autoincremental pose problème. Il est de type "Integer" contrairement aux autres qui sont de type Int. Quelqu'un a une idée ?

Je précise que je récupère ces champs d'une DB Access que je convertis en SQLite3.

D'avance merci;

Sethy

Réponses

  • muqaddarmuqaddar Administrateur
    20:49 modifié #2
    Si tu le passes en résolu, mets au moins la réponse !
  • SethySethy Membre
    20:49 modifié #3

    Désolé, mais j'ai trouvé juste avant d'aller manger et je ne voulais pas que quelqu'un se creuse la tête pour rien.

    En fait, je n'ai rien changé et ça s'est débloqué tout seul ^^.

    J'avais peut être mal mis mes breakpoints.

    De même pour les IDs.

    Ca fera partie des mystères de l'Oucocouaest.
  • 20:49 modifié #4
    Petit conseil, utilise FMDatabase (google it). C'est un wrapper Objective-C et il est vachement bien foutu
  • muqaddarmuqaddar Administrateur
    20:49 modifié #5
    dans 1313396747:

    Petit conseil, utilise FMDatabase (google it). C'est un wrapper Objective-C et il est vachement bien foutu


    Je plussoie, je l'utilise dans 3 applis.
  • SethySethy Membre
    20:49 modifié #6

    Je viens d'y jeter un oeil et ça à  l'air intéressant.

    J'ai hésité à  l'implémenter dans ma solution actuelle, mais à  la réflexion je ne vais pas le faire.

    Il faut dire que la DB sert principalement à  obtenir des infos "from factory" et qu'assez peu de choses y sont finalement stockés.

    Ceci dit, pour la prochaine, c'est quasi sûr que j'y passerai.

    En plus, ça ouvrait plus de question que ça n'en résolvait : faut-il recopier les 3 .h/.m dans l'appli, faut-il linker avec le .a, etc. Beaucoup de nouvelles choses encore à  apprendre.

    Sethy
Connectez-vous ou Inscrivez-vous pour répondre.