私は初めて 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;
}