私は初心者です。この問題を抱えているのは私だけではないと思いましたが、私が見た他のすべての問題は、この特定の問題をカバーしていないようでした。sqlite でテーブルを更新しようとしています。以下のコードを参照してください。このコードは 5.1 と 6.1 の両方のシミュレーターで動作しますが、自分のデバイス (iPhone 4 - iOS 6.1) で実行すると、" sqlite3_exec(database, "COMMIT", NULL, NULL, &errmsg);
" ステートメント (下から 5 番目のステートメント) がエラー "if" ステートメント (下から 4 番目のステートメント) で失敗します。そして、「更新中にエラーが発生しました。コミットできません - トランザクションがアクティブではありません」という NLog ステートメント (下から 3 番目のステートメント) が表示されます。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
int rowCount = indexPath.row;
Game *game = [self.thegames objectAtIndex:rowCount];
cell.textLabel.text = game.GameDate;
NSString* str3=[game.GameDate substringToIndex:4];
NSString * Selected = [NSString stringWithFormat:@"%@%@", @"You Selected Game - ", str3];
displayLabel.text = Selected;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"sportretortdatab2.sqlite"];
NSString* str1 = displayLabel.text;
NSString *str2 = [str1 substringFromIndex: [str1 length] - 4];
sqlite3 *database;
sqlite3_stmt *updateStmt;
if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK)
{
NSString* sql= [NSString stringWithFormat:@"UPDATE ArchievedGameDate Set GameDate = \"%@\"", str2];
if(sqlite3_prepare(db, [sql cStringUsingEncoding:NSASCIIStringEncoding], -1, &updateStmt, NULL) != SQLITE_OK)
NSLog(@"Error while creating update statement. %s", sqlite3_errmsg(database));
}
char* errmsg;
sqlite3_exec(database, "COMMIT", NULL, NULL, &errmsg);
if(SQLITE_DONE != sqlite3_step(updateStmt))
NSLog(@"Error while updating. %s", sqlite3_errmsg(database));
sqlite3_finalize(updateStmt);
sqlite3_close(database);
}