0

我需要一些帮助来通过 Tableview 删除数据库中的行。在我的应用程序中,我使用 SKDatabase 文件进行查询。现在当我调用删除查询时它不起作用。下面是我的代码

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    i = indexPath.row;     
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        [objappdel.sk deleteWhere:[NSString stringWithFormat:@"ID = %d",indexPath.row] forTable:@"Highlights_Table"];

        tablstr = [arrayFinal objectAtIndex:indexPath.row];
        NSLog(@" %@",tablstr);
        [arrayFinal removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
    [table1 reloadData];
}

如果我正在使用删除所有数据查询,那么它正在工作,我不知道如何解决这个问题。请帮忙。

删除 SKDatabase.m 中的方法代码

- (void)deleteWhere:(NSString *)where forTable:(NSString *)table 
{
    NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@",
                 table,where];
    NSLog(@" %@",sql);
    [self runDynamicSQL:sql forTable:table];
}

- (BOOL)runDynamicSQL:(NSString *)sql forTable:(NSString *)table
{
   int result;
   NSAssert1(self.dynamic == 1,[NSString stringWithString:@"Tried to use a dynamic function on a static database"],NULL);
   sqlite3_stmt *statement;
   if (statement = [self prepare:sql]) 
   {
       result = sqlite3_step(statement);
   }        
   sqlite3_finalize(statement);
   if (result) 
   {
       if (self.delegate != NULL && [self.delegate respondsToSelector:@selector(databaseTableWasUpdated:)]) 
       {
           [delegate databaseTableWasUpdated:table];
       }    
       return YES;
       NSLog(@"Done");
    } 
    else 
    {
        return NO;
    }

 }


- (sqlite3_stmt *)prepare:(NSString *)sql 
{

    const char *utfsql = [sql UTF8String];
    NSLog(@" %s",utfsql);

    sqlite3_stmt *statement;

    if (sqlite3_prepare([self dbh],utfsql,-1,&statement,NULL) == SQLITE_OK) 
    {
        return statement;
    } 
    else
    {
        return 0;
    }
}
4

3 回答 3

0

试着加上引号:

[objappdel.sk deleteWhere:[NSString stringWithFormat:@"ID = \"%d\"",indexPath.row] forTable:@"Highlights_Table"];

代替:

[objappdel.sk deleteWhere:[NSString stringWithFormat:@"ID = %d",indexPath.row] forTable:@"Highlights_Table"];
于 2013-07-03T08:38:25.053 回答
0
Highlights_Table *tableObj = [arrayFinal objectAtIndex:indexPath.row];

[[DataManager mangedObjectContext] deleteObject:tableObj];

[[DataManager mangedObjectContext] save:&error];

[arrayFinal removeObjectAtIndex:indexPath.row];

[self.tableView reloadData];
于 2013-07-03T08:41:11.970 回答
0

通常来自的对象SQLiteNSNumber所以而不是"ID = %d"你应该替换为 "ID == %@",[NSNumber numberWithInteger:indexPath.row];

我从未使用过 SKDatabase 但我很确定"ID = %d"不会生成规则,你只有 1 "=",如果"ID == %@"不工作你应该尝试使用"ID==%d".

于 2013-07-03T08:29:56.323 回答