FMDBのドキュメントを何百回も読んでいるような気がします。私はなぜこのコードが動作していないのか分かりません - 私はexecuteUpdateメソッドとexecuteMethodWithFormatとそれに対応するフォーマットを試しましたが、どちらもうまくいかないようです。 _dbArrayは辞書の配列です。これらの行は正しい値を返します。結果をコピー&ペーストして端末でクエリを実行すると、レコードは正常に削除されます。明白な何かが欠けていますか?FMDBのSQLiteデータベースから行を削除
- (IBAction)deleteDbEntry:(id)sender {
// get selected row
NSInteger row = [_dataTable selectedRow];
// get the entry number
NSString *idToDelete = [[_dbArray objectAtIndex:row] valueForKey:@"entryColumn"];
// open DB for writing
if (![db open]) {
[db open];
}
[db executeUpdate:@"DELETE FROM tbl1 WHERE entry = ?", idToDelete];
// close DB
if ([db open]) {
[db close];
}
[_dataTable reloadData];
return;
}
更新:私はあなたの提案を受けて、まだ動作していない、と私はなぜわからない。 DBのオープンとクローズが今どこかで行われています(@ccgusありがとう)、文字列をNSNumberに変換しています(thanks @bryanmac)。電話番号NSLog(@"myNumber is %@", myNumber);
が正しい番号を返しています。削除が行われていないことを確認できます。 NSLog(@"Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);
にエラーが報告されていません(Error 0: (null)
)。それが動作するはずのよう
[db executeUpdateWithFormat:@"DELETE FROM tbl1 WHERE entry = %@", myNumber];
と
[db executeUpdate:@"DELETE FROM tbl1 WHERE id = ?", [NSNumber numberWithInt:myNumber]];
最初はそう、私はそれが行を削除しません確認している:私も試してみました。 2番目のエラーは "互換性のない整数からポインタへの変換"です。私は何が欠けていますか?追加
- (IBAction)deleteDbEntry:(id)sender {
// get selected row
NSInteger row = [_dataTable selectedRow];
// get the entry number
NSString *idToDelete = [[_dbArray objectAtIndex:row] valueForKey:@"entryColumn"];
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *myNumber = [f numberFromString:idToDelete];
NSLog(@"myNumber is %@", myNumber);
[db executeUpdate:@"DELETE FROM tbl1 WHERE entry = ?", myNumber];
NSLog(@"Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);
[_dataTable reloadData];
return;
}
http:// novasys。in/2013/11/22/fmdb-implimentation-ios-applications/ – sohil
http://www.brianjcoleman.com/framework-using-fmdb-to-communicate-with-sqlite-databases/ – sohil