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

通常、からのオブジェクトSQLiteNSNumberそうではなく、次のように"ID = %d"置き換える必要があります "ID == %@",[NSNumber numberWithInteger:indexPath.row];

私は SKDatabase を使用したことはありませんが、「ID = %d」はルールを生成しないと確信しています。"=""ID == %@""ID==%d"

于 2013-07-03T08:29:56.323 に答える