1

Xcode デバッガによると、プロジェクトのテーブルから行を削除するための適切な構文を使用しています。ただし、戻ってデータベースを確認すると、まだ存在しています。エントリを挿入するための他の SQL 構文は正しいので、何が間違っているのかわかりません。NSLogs は、両方の変数が正しく送信されていることを確認します。

    -(void) deleteSelectedRowFromTable: (NSString *) tableName cityName:(NSString *)city 
{

[self openDB];
NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM %@ WHERE city LIKE %@", tableName, city];
const char *sql = [sqlStr UTF8String];
sqlite3_stmt *statement;

if (sqlite3_prepare_v2(db, sql, -1, &statement, nil) == SQLITE_OK) {
    NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(db));
}

sqlite3_finalize(statement);
sqlite3_close(db);

}
4

3 に答える 3

1

このステートメントを試してください

NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM '%@' WHERE city LIKE '%@%%'", tableName, city];

于 2010-11-29T03:57:29.897 に答える
1

LIKE のオペランドが文字列であることを確認します (引用符で囲む必要があります)。私は XCode を使用したことがありませんが、5 行目を次のように変更すると:

NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM %@ WHERE city LIKE '%@'", tableName, city];

それは動作しますか?

于 2010-11-29T03:33:51.207 に答える
0

ステートメントを準備したら、そのステートメントを実行する必要があります。

-(void) deleteSelectedRowFromTable: (NSString *) tableName cityName:(NSString *)city 
{

[self openDB];
NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM %@ WHERE city LIKE %@", tableName, city];
const char *sql = [sqlStr UTF8String];
sqlite3_stmt *statement;

if (sqlite3_prepare_v2(db, sql, -1, &statement, nil) != SQLITE_OK) 
{
      /**this one will execute when there is error in your query**/
    NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(db));
}
else
{
     /************just add this one****************/
     sqlite3_step(statement);
}

sqlite3_finalize(statement);
sqlite3_close(db);

}

これがあなたを助けることを願っています。

于 2010-11-29T03:54:59.720 に答える