1

iPhone用のSQLiteアプリケーションを作成しました。iMacに配置されたSQLiteDBでSELECTをテストすると、すべてが正常に機能しますが、iPhoneでは行が返されません。

SELECT ID, SAP_PART_NR, SAP_DESC, MOQ, INC, NLT, DISCOUNT_CODE, AD_EURO, AD_USD, OEM_EURO, OEM_USD FROM Component WHERE SAP_PART_NR LIKE '%AWM423%' LIMIT 200

今奇妙な部分

iPhoneで以下の選択を使用すると、 SAP_PART_NRAWM42300Vで1つのレコードが返されます

SELECT ID, SAP_PART_NR, SAP_DESC, MOQ, INC, NLT, DISCOUNT_CODE, AD_EURO, AD_USD, OEM_EURO, OEM_USD FROM Component WHERE SAP_PART_NR LIKE '%AWM42%' LIMIT 200

iMacでテストすると、両方の選択で行が返されます(必要に応じて)

それはiPhone/SQliteのある種のバグですか?

私はそれを理解することができません....私の髪はすべて灰色になりました....:-(

動作しないコード(行が選択されていません)

-(void) searchDB:(NSString *)strSearch {

    NSString *wildcardSearch = [NSString stringWithFormat:@"%%%@%%", strSearch];

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    if(searchSTMT == nil) {
       const char *sql = "SELECT ID, SAP_PART_NR, SAP_DESC, MOQ, INC, NLT, DISCOUNT_CODE, AD_EURO, AD_USD, OEM_EURO, OEM_USD FROM Component WHERE SAP_PART_NR LIKE '%AWM4230%'";
        if(sqlite3_prepare_v2(database, sql, -1, &searchSTMT, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating view statement. '%s'", sqlite3_errmsg(database));
    }

    if(SQLITE_DONE != sqlite3_step(searchSTMT)) {

        while(sqlite3_step(searchSTMT) == SQLITE_ROW) {

            NSInteger primaryKey = sqlite3_column_int(searchSTMT, 0);
            Database *DatabaseObj = [[Database alloc] initWithPrimaryKey:primaryKey];
            DatabaseObj.sapPart = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 1)];
            DatabaseObj.sapDesc = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 2)];
            DatabaseObj.sapMOQ = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 3)];                
            DatabaseObj.sapINC = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 4)];                 
            DatabaseObj.sapNLT = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 5)];
            DatabaseObj.sapDISCOUNT = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 6)]; 

            DatabaseObj.oemEURO = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 7)];
            DatabaseObj.oemUSD = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 8)];    
            DatabaseObj.adEURO = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 9)];         
            DatabaseObj.adUSD = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchSTMT, 10)];                        

            [appDelegate.compArray addObject:DatabaseObj];
        }
    }
    else 
        NSAssert1(0, @"Error while getting the rows. '%s'", sqlite3_errmsg(database));

    //Reset the detail statement.
    sqlite3_reset(searchSTMT);

}

作業コード1行が選択されました

+ (void) getInitialDataToDisplay:(NSString *)dbPath {<p>
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    sqlite3_stmt *selectstmt = NULL;

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

       const char *sql = "SELECT ID, SAP_PART_NR, SAP_DESC, MOQ, INC, NLT, DISCOUNT_CODE, AD_EURO, AD_USD, OEM_EURO, OEM_USD FROM Component WHERE SAP_PART_NR LIKE '%AWM4230%'";

        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

            while(sqlite3_step(selectstmt) == SQLITE_ROW) {

                NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
                Database *DatabaseObj = [[Database alloc] initWithPrimaryKey:primaryKey];
                DatabaseObj.sapPart = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
                DatabaseObj.sapDesc = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];
                DatabaseObj.sapMOQ = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 3)];                
                DatabaseObj.sapINC = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 4)];                 
                DatabaseObj.sapNLT = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 5)];
                DatabaseObj.sapDISCOUNT = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 6)]; 
                //PRICES
                DatabaseObj.oemEURO = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 7)]; 
                DatabaseObj.oemUSD = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 8)];    
                DatabaseObj.adEURO = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 9)];         
                DatabaseObj.adUSD = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 10)];                      

                [appDelegate.compArray addObject:DatabaseObj];
            }
        }
    }
    else
        sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory.

    sqlite3_reset(selectstmt);
}
4

1 に答える 1

0

解決済み-コメントを見てください。なぜ/どのようにこれがそれを解決したのか、私はまだ100%確信していません。

于 2012-06-26T13:43:10.787 に答える