ric*_*ick 3 sqlite cocoa objective-c fmdb
我觉得我已经阅读了FMDB的文档一百万次.我不知道为什么这个代码不起作用 - 我已经尝试了executeUpdate方法和executeMethodWithFormat及其相应的格式,似乎都不起作用._dbArray是一个dictionarys数组.这些行返回正确的值 - 如果我复制并粘贴结果并在终端中运行查询,它将删除记录正常.我错过了明显的东西吗?
- (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;
}
Run Code Online (Sandbox Code Playgroud)
更新:我已经采纳了你的建议,它仍然没有工作,我不知道为什么.数据库的打开和关闭现在正在其他地方发生(谢谢@ccgus),我正在将字符串转换为NSNumber(感谢@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]];
第一个似乎应该工作,但我已经确认它不会删除该行.我的第二个错误是"与指针转换不兼容的整数".我错过了什么?
- (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;
}
Run Code Online (Sandbox Code Playgroud)
你的id是int吗?
如果是这样,请尝试将NSNumber传递给格式化的更新语句.
这篇文章可以将NSString转换为NSNumber.
[db executeUpdate:@"DELETE FROM tbl1 WHERE entry = ?", idNumber];
Run Code Online (Sandbox Code Playgroud)
这是一篇相关的帖子:
另外,请确保在发言后检查错误:
NSLog(@"Error %d: %@", [db lastErrorCode], [db lastErrorMessage]);
Run Code Online (Sandbox Code Playgroud)