2011-06-27 6 views
0

Bonjour je travaille avec sqlite et j'ai ajouté les données dans la base de données avec succès, mais le problème est que lorsque je supprime des données dans une autre vue de table et revenir à ma vue principale et je appuyez sur le bouton UIBarButton pour appeler une fonction qui vérifie à nouveau les données dans la base de données. Maintenant, mon problème est que les données qui sont nouvellement affichées dans la table sont celles qui ont été supprimées, donc j'ai essayé d'imprimer mon tableau mutable et dans le journal je vois que ce n'est pas de telles données, mais aussi dans la table voir la cellule je vois ces données. ci-dessous est mon code pour lire les données dans la base deProblème lors de la récupération de données depuis sqlite

 
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    NSString *databasePath = [documentsDir stringByAppendingPathComponent:@"PotsDB.sqlite"]; 

    sqlite3 *database; 

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 
     // Setup the SQL Statement and compile it for faster access 
     const char *sqlStatement = "SELECT potsName FROM potsDetail;"; 
     sqlite3_stmt *compiledStatement; 
     if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 
      while(sqlite3_step(compiledStatement) == SQLITE_ROW) { 


       NSString *Potname=[NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 0)]; 
       NSString * pname = [[NSString alloc]initWithFormat:@"%@",Potname]; 
       [potsArray addObject:pname]; 
       NSLog(@"The data in the array is %@",potsArray); 

      } 
     } 
     // Release the compiled statement from memory 
     sqlite3_finalize(compiledStatement); 
    } 
    sqlite3_close(database); 

également Heres le code que je fais appel sur le bouton de rafraîchissement

 
-(IBAction)RefreshButtonTouched 
{ 
    [potsArray removeAllObjects]; 
    [self Read_Potname_FromDB]; 
    [potsTableView reloadData]; 
} 

La requête de suppression que je vous écris, je pense que je suis faire une erreur avec suppression ici

 
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    NSString *databasePath = [documentsDir stringByAppendingPathComponent:@"PotsDB.sqlite"]; 

    sqlite3 *database; 

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 
     // Setup the SQL Statement and compile it for faster access 
     NSString *deleteStatement = [NSString stringWithFormat:@"delete from potsDetail where potsName = '%@'",sptr]; 
     const char *sqlStatement = [deleteStatement cStringUsingEncoding:NSASCIIStringEncoding]; 
     sqlite3_stmt *compiledStatement; 

     if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 
      while(sqlite3_step(compiledStatement) == SQLITE_ROW) { 

       NSString *Potname=[NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 0)]; 
       NSString * pname = [[NSString alloc]initWithFormat:@"%@",Potname]; 
       [potsArray addObject:pname]; 
       //[pname release]; 
      } 
     } 
     // Release the compiled statement from memory 
     sqlite3_finalize(compiledStatement); 
    } 
    sqlite3_close(database); 

S'il vous plaît, aidez-moi suis assez foiré avec cela. Merci à l'avance

Répondre

1

Il y a deux cas qui peuvent se produire ici:

1) Les données sont en réalité pas supprimée, car vous pourriez avoir pas appelé « sqlite3_finalize (compiledStatement); » déclaration, qui est responsable de la validation de toute transaction.

2) UITableView n'est pas rechargé, avez-vous essayé d'utiliser "[tableView reloadData];" sur le clic de UIBarbuttonItem?

+0

oui j'ai essayé cela et vous pouvez voir dans le code ci-dessus que j'ai appelé le sqlite3_finalize (compiledStatement); – Radix

+1

Maintenant, il est possible de UITableViewCell, est-ce que vous définissez le texte de l'étiquette dans (cell == nil) scope ???? Je pense, le problème est avec l'affichage des étiquettes sur tableview – iMOBDEV

+0

oui je faisais que seulement – Radix

1

Vous n'avez jamais supprimé les données dans la base de données sqlite. [potsArray removeAllObjects] supprimera simplement la version en mémoire, pas celle stockée sur le disque. Vous devrez ajouter une méthode de base de données avec une requête DELETE FROM pour affecter réellement la base de données sqlite.

+0

postera mon code de suppression – Radix

Questions connexes