2009-08-03 6 views
0

J'utilise SQLite3 dans mon application iPhone pour sélectionner les données d'une table (tbresults), faire des calculs sur les données et les afficher dans ma vue uitable. La commande sql utilise la fonction SUM et mon application ne semble pas l'aimer.Problème lors de l'utilisation de la fonction SUM avec SQLite3 sur iPhone

La méthode dans laquelle je fais la sélection dans la table est ci-dessous mais le traitement semble échouer à la ligne suivante.

if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) 

Le code complet de la méthode est ci-dessous.

+ (void) getLeagueTable { 

Tag_TrackerAppDelegate *appDelegate = (Tag_TrackerAppDelegate *)[[UIApplication sharedApplication] delegate]; 
appDelegate.tbresultsArray = [[NSMutableArray alloc] init]; 


const char *sql = "select a.resultid, a.teamname, sum(b.played), sum(b.win), " 
"sum(b.draw), sum(b.lose), sum(b.for), sum(b.against), sum(b.win * 3 + b.draw) " 
"from tbteam a, tbresults b, tbseason c where a.teamid = b.teamid and c.active = 'Y'" 
"and b.seasonid = c.seasonid group by b.teamid order by points desc;"; 


sqlite3_stmt *selectstmt; 
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) { 

    sqlite3_stmt *selectstmt; 

    while(sqlite3_step(selectstmt) == SQLITE_ROW) { 

     NSInteger primaryKey = sqlite3_column_int(selectstmt, 0); 
     tbresults *resultsObj = [[tbresults alloc] initWithPrimaryKey:primaryKey]; 

     resultsObj.teamname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)]; 

     resultsObj.played = sqlite3_column_int(selectstmt, 2); 
     resultsObj.won = sqlite3_column_int(selectstmt, 3); 
     resultsObj.drawn = sqlite3_column_int(selectstmt, 4); 
     resultsObj.lost = sqlite3_column_int(selectstmt, 5); 
     resultsObj.For = sqlite3_column_int(selectstmt, 6); 
     resultsObj.Against = sqlite3_column_int(selectstmt, 7); 
     resultsObj.points = sqlite3_column_int(selectstmt, 8); 

     [appDelegate.tbresultsArray addObject:resultsObj]; 
     [resultsObj release]; 
    } 
} 
else 
    sqlite3_close(database); 

}

Est-ce que quelqu'un sait s'il y a un problème en utilisant la fonction SOMME sur l'iPhone? J'ai vérifié et vérifié le reste du code. La base de données est en cours d'ouverture.

Toute aide serait appréciée.

Répondre

0

Quel type d'erreur obtenez-vous?

Je pense que votre instruction select n'est pas valide, arrêtez de sélectionner la colonne a.resultid ou incluez cette colonne dans le groupe et cela fonctionnera.

+0

Je voudrais pouvoir dire ce que l'erreur est, mais je ne sais pas ce que signifie le code d'erreur. Le code est 4123824 mais je ne trouve pas ce code n'importe où. Je sais juste que sqlite3_prepare_v2 n'est pas égal à SQLITE_OK. J'ai aussi essayé votre suggestion de supprimer a.resultid ou de la déplacer dans la clause group by mais cela n'a malheureusement pas fonctionné. –

0

Vous auriez besoin d'un bon groupe par clause au moins:

"select a.resultid, a.teamname, sum(b.played), sum(b.win), " 
"sum(b.draw), sum(b.lose), sum(b.for), sum(b.against), sum(b.win * 3 + b.draw) " 
"from tbteam a, tbresults b, tbseason c where a.teamid = b.teamid and c.active = 'Y'" 
"and b.seasonid = c.seasonid group by a.resultid, a.teamname order by points desc;"; 
+0

La façon dont j'ai la clause group by fonctionne pour moi dans une session terminal. Quand je teste le SQL dans le terminal je modifie légèrement le SQL pour retourner de nouvelles colonnes pour montrer les valeurs additionnées, ie sum (b.lose) comme perdu Si j'utilise la clause de groupe, vous suggérez que les données ne sont pas retournées dans le format J'ai besoin. Merci pour la suggestion cependant. –