2013-07-13 2 views
0

Я выполнение указанных ниже метода для заполнения таблицы SQLite, когда я получаю эту ошибку:Вставка SQLite таблицы из массива

"DB SUPPORT - ERROR commentTable INSERT". 

Любой помощь о том, где я буду неправильно?

Код:

(void) saveSales: (NSMutableArray*)aSalesArray 
    { 

    NSDate* now = [NSDate date]; 



    ////////////////////////////////////////////////////////////// 


    for(int i=0;i<[aSalesArray count];i++) 
    { 

     NSMutableDictionary *myDict = [aSalesArray objectAtIndex:i]; 

     NSString * fklItemID =[myDict valueForKey:@"fklItemD"]; 
     NSString * lSellingPrice = [myDict valueForKey:@"lSellingPrice"]; 
     NSString * lQuantity = [myDict valueForKey:@"lQuantity"]; 
     bool bLooseDraw = [myDict valueForKey:@"bLooseDraw"]; 
     bool bLooseDrawPacket = [myDict valueForKey:@"bLooseDrawPacket"]; 
     NSString *sDeviceUID = [myDict valueForKey:@"sDeviceUID"]; 

     NSString *selectSql = [NSString stringWithFormat: @"INSERT INTO Spaza_Sales (fklSpazaID,fklItemID,lSellingPrice,lQuantity,bLooseDraw,bLosDrawPacket,sDeviceUID,dtTimestamp)\ 
            VALUES ('%d','%@','%@','%@',%i,%i,'%@','%@')",0,fklItemID, lSellingPrice, lQuantity, bLooseDraw,bLooseDrawPacket,sDeviceUID,now]; 

     const char *sql = [selectSql UTF8String]; 


     NSLog(@"The SQl String is %@",selectSql); 

     sqlite3_stmt *statement; 


     // Prepare the statement to compile the SQL query into byte-code 
     int sqlResult = sqlite3_prepare_v2(database, sql, -1, &statement, NULL); 

     NSLog(@"The SQl String is %d",sqlResult); 

     if (sqlResult== SQLITE_OK) 
     { 
      if (sqlite3_step(statement) == SQLITE_DONE) 
      { 
       //BOOL ret = YES; 
       NSLog(@"DB SUPPORT - commentTable INSERTED"); 
      } 
      else 
      { 
       NSLog(@"DB SUPPORT - ERROR commentTable INSERT"); 
      } 

     } 
     else 
     { 
      NSLog(@"DB SUPPORT - Sql Preparing Error (INSERT commentTable)"); 
     } 

     sqlite3_finalize(statement); 
    } 
} 
+1

http://www.sqlite.org/c3ref/errcode.html Log коды ошибок и сообщений, а также;) – AmazingDreams

ответ

0
NSString *selectSql = [NSString stringWithFormat: @"INSERT INTO Spaza_Sales (fklSpazaID,fklItemID,lSellingPrice,lQuantity,bLooseDraw,bLosDrawPacket,sDeviceUID,dtTimestamp)\ 
           VALUES ('%d','%@','%@','%@',%i,%i,'%@','%@')",0,fklItemID, lSellingPrice, lQuantity, bLooseDraw,bLooseDrawPacket,sDeviceUID,now]; 

В конце первой линии у вас есть обратный слэш \ который я думаю, будет интерпретироваться как значение строки вызывает недопустимый запрос. (Проверьте свои журналы?)

+0

я удалил \ и по-прежнему получают ту же ошибку. Я посмотрел журналы, и операторы sql верны. – BDR

0

В итоге я использовал код ниже, и он сработал. На всякий случай кто-то столкнется с подобной проблемой в будущем.

                         `- (void) saveSales: (NSMutableArray*)aSalesArray 

{

NSDate* now = [NSDate date]; 


for(int i=0;i<[aSalesArray count];i++) 
{ 

    NSMutableDictionary *myDict = [aSalesArray objectAtIndex:i]; 

    NSString * fklItemID =[myDict valueForKey:@"fklItemD"]; 
    NSString * lSellingPrice = [myDict valueForKey:@"lSellingPrice"]; 
    NSString * lQuantity = [myDict valueForKey:@"lQuantity"]; 
    bool bLooseDraw = [myDict valueForKey:@"bLooseDraw"]; 
    bool bLooseDrawPacket = [myDict valueForKey:@"bLooseDrawPacket"]; 
    NSString *sDeviceUID = [myDict valueForKey:@"sDeviceUID"]; 

    NSString *selectSql = [NSString stringWithFormat: @"INSERT INTO Spaza_Sales (fklSpazaID,fklItemID,lSellingPrice,lQuantity,bLooseDraw,bLosDrawPacket,sDeviceUID,dtTimestamp) VALUES ('%d','%@','%@','%@',%i,%i,'%@','%@')",0,fklItemID, lSellingPrice, lQuantity, bLooseDraw,bLooseDrawPacket,sDeviceUID,now]; 

    const char *sql = [selectSql UTF8String]; 


    NSLog(@"The SQl String is %@",selectSql); 

    sqlite3_stmt *statement; 


    // Prepare the statement to compile the SQL query into byte-code 
    int sqlResult = sqlite3_prepare_v2(database, sql, -1, &statement, NULL); 

    NSLog(@"The SQl String is %d",sqlResult); 

    sqlite3_step(statement); 

    NSLog(@"Executed sqlite3_step "); 

    //If the result is SQLITE_OK, we step through the results one row at a time using the sqlite3_step function: 

    if (sqlResult== SQLITE_OK) { 
     // Step through the results - once for each row. 
     NSLog(@"Record Updated"); 
     // Finalize the statement to release its resources 
     sqlite3_finalize(statement); 
    } 

    else { 
     NSLog(@"Problem with the database:"); 
     NSLog(@"%d",sqlResult); 
    } 
    //return products; 

} 

} `

Смежные вопросы