2

FMDBからの空の結果セットをトラップするのに問題があります。コードは以下のとおりです。データベースの開閉とNSLog"1"からNSLogを取得していますが、Ifステートメントに含まれているものはありません。データベースにデータがある場合は問題ありませんが、データベースが空の場合は結果をトラップして編集したいと思います。

    [self openDatabase];

NSNumberFormatter *nfcurrency = [[NSNumberFormatter alloc]init];
[nfcurrency setNumberStyle:NSNumberFormatterCurrencyStyle];
[nfcurrency setLocale:[NSLocale currentLocale]];

FMResultSet *result = [[self getDatabase]executeQuery:@"SELECT BFNeeded FROM tblBets ORDER BY pk DESC LIMIT 1,1;"];
//FMResultSet *result = [[self getDatabase]executeQuery:@"SELECT BFNeeded FROM tblBets ORDER BY pk DESC LIMIT 1,1;"];
NSLog(@"1");
if (result == NULL) {
    NSLog(@"Last BFNeeded Result = nil");
} else {
    while ([result next]) {
        NSLog(@"HERE");
        NSString *lastBFNeeded = [nfcurrency stringFromNumber:[NSNumber numberWithDouble:[result doubleForColumn:@"BFNeeded"]]];
        NSLog(@"lastBFNeeded=%@",lastBFNeeded);
    }
}

NSLog(@"ClosingDB");
[self closeDatabase];

最初の返信を受け取った後も続行します。

hasAnotherRowを期待どおりに動作させることができません。私はこのコードを持っています:

FMResultSet *result = [[self getDatabase]executeQuery:@"SELECT BFNeeded FROM tblBets ORDER BY pk DESC LIMIT 0,1;"];

if (result == nil) {
    NSLog(@"Last BFNeeded Result = nil");
}
else {
    NSLog(@"has results1: %@", [result hasAnotherRow] ? @"YES" : @"NO");
    while ([result next]) {
        NSLog(@"has results2: %@", [result hasAnotherRow] ? @"YES" : @"NO");
    }
}

結果を返すデータベースでは、result1 NO、result2 YESを取得するため、hasAnotherRowはwhile([result next])ループ内に入る必要があると想定しています。ただし、データベースが空の場合、result1はNOになり、result2にも到達しません。

4

2 に答える 2

6

0 行を生成するクエリの場合、「結果」が nil になることはありません。

また、オブジェクト ポインタをNULL-- と比較しないでくださいnil。この質問を参照してください: Objective-C の NULL と nil

これを試して:

FMResultSet *result = [[self getDatabase]executeQuery:@"SELECT BFNeeded FROM tblBets ORDER BY pk DESC LIMIT 1,1;"];

NSLog ( @"has results: %@", [result hasAnotherRow] ? @"YES" : @"NO" );
于 2011-12-14T21:22:24.617 に答える