0

私は初めて SQlite を使用しています....DB で割引を調べましたが、「何もしない」を選択するまで、すべてが正常に機能します。これは、金額 (adNumbers) が DB で指定された値よりも高いか低い場合に発生します。

次に、DB 列から割引値を取得しようとすると、エラーが発生し、アプリケーションがクラッシュします。NULL チェックを試みましたが、役に立たないようです。

私は使用しようとしました while( sqlite3_step(compiledStatement) == SQLITE_ROW){

しかし、私は何も返されません...

正しい方向に向けてください-DBがレコードを返すかどうかを確認するにはどうすればよいですか(adNumbersはDBの値の間にあります)

これが私の方法です..

-(NSString *) adDisq:(NSString *)strDISQ:(NSInteger)adNumbers{

NSString *strDiscount;
strDiscount = @"00";

if(adSTMT == nil) {
    const char *sql = "SELECT ID, DISCOUNT_TYPE, DESCRIPTION, AD_FROM, AD_TO, AD_DISQ FROM DISCOUNT "
                      "WHERE (((DISCOUNT_TYPE)=?) AND ((?) Between AD_FROM And AD_TO))";

    if(sqlite3_prepare_v2(database, sql, -1, &adSTMT, NULL) != SQLITE_OK)
        NSAssert1(0, @"Error while creating detail view statement. '%s'", sqlite3_errmsg(database));
}

sqlite3_bind_text(adSTMT, 1, [strDISQ UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_int(adSTMT, 2, adNumbers);   

if(SQLITE_DONE != sqlite3_step(adSTMT)) {
    NSLog(@"SELECT went OK, getting rows");
    const char *columnText = (const char *)sqlite3_column_text(adSTMT, 5);
    if(columnText != NULL){
        strDiscount = [NSString stringWithUTF8String:(char *)sqlite3_column_text(adSTMT, 5)];
        NSLog(@"Discount: %@", strDiscount);
    }
    else {
        strDiscount = @"00";
    }
}
else{
    NSAssert1(0, @"Error while getting the discount'%s'", sqlite3_errmsg(database));
}

//Reset the detail statement.
sqlite3_reset(adSTMT);
return strDiscount;

}

4

1 に答える 1

0

問題が解決しました

NSAssert1(0, @"割引'%s'の取得中にエラーが発生しました", sqlite3_errmsg(データベース));

クラッシュを起こしていました - 予想通り - おっ!

于 2012-06-06T15:43:27.443 に答える