0

SQLiteデータベースを使用して、1)何らかの値、2)何らかの値などの形式でテーブルビューにデータをロードしました。1 と 2 は主キーです。これは、テーブル ビューのスワイプ削除機能に追加した削除のコードです。

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self openDB];
    NSString *idofTable = [NSString new];
    NSScanner *scanner = [[NSScanner alloc] initWithString:[self.tableLogView cellForRowAtIndexPath:indexPath].textLabel.text];
    [scanner scanUpToString:@")" intoString:&idofTable];

    NSLog(@"id=%@, text=%@", idofTable, [self.tableLogView cellForRowAtIndexPath:indexPath].textLabel.text);

    if(editingStyle==UITableViewCellEditingStyleDelete)
    {
        char *error;

        NSString *sql = [NSString stringWithFormat:@"DELETE FROM History WHERE 'id' = '%@'", idofTable];

        NSLog(@"%@",sql);

        if(sqlite3_exec(db, [sql UTF8String], NULL, NULL,&error)!=SQLITE_OK)
        {
            sqlite3_close(db);
            NSAssert(0,@"Could not create table");

        }
        else
        {
            NSLog(@"Data Deleted");
            sqlite3_exec(db, "COMMIT", NULL, NULL, &error);
        }
    }
    [tableLogView reloadData];
}

ログ「データが削除されました」が出力されますが、データはデータベースでもテーブルビューでも削除されません。どんな助けでも感謝します。エラーが発生している場所がわかりません。クエリは正しいようです。

4

3 に答える 3

1

データベースをファイナライズもクローズもしていません。

sqlite3_finalize(stmt);

sqlite3_close(DB);
于 2013-08-14T07:45:12.033 に答える
0

行を削除する正しい方法は次のとおりです。

if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

   NSString *sql = [NSString stringWithFormat:@"DELETE FROM History WHERE 'id' = '%@'", idofTable];

   const char *del_stmt = [sql UTF8String];
   sqlite3_prepare_v2(contactDB, del_stmt, -1, & deleteStmt, NULL);
   if (sqlite3_step(deleteStmt) == SQLITE_DONE)
   {
       NSLog(@"Data Deleted");
       sqlite3_exec(db, "COMMIT", NULL, NULL, &error);
   }else {
       NSLog( @"Error: %s", sqlite3_errmsg(database) );
   }
   sqlite3_finalize(deleteStmt);
   sqlite3_close(contactDB);


}
于 2013-08-14T07:36:19.707 に答える