SQLite3 COUNT неверен - PullRequest
       3

SQLite3 COUNT неверен

0 голосов
/ 12 мая 2011

Скажем, у меня есть стол под названием Инциденты и стол под названием Устройства.

Каждое устройство имеет CI-код.

Я хочу создать табличное представление, в разделах которого указаны имена устройств (CI) и каждая строка для представления инцидента. Чтобы получить правильное количество строк в каждом разделе, я использую следующий код:

NSMutableArray *lijstDevices = [[NSMutableArray alloc] init];
const char *dbpath = [appDelegate.databasePath UTF8String];
sqlite3_stmt *statement;

if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
{
    NSString *querySQL = [NSString stringWithFormat:@"SELECT DISTINCT CI FROM Devices"];
    const char *query_stmt = [querySQL UTF8String];

    if (sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) == SQLITE_OK)
    {
        while (sqlite3_step(statement) == SQLITE_ROW)
        {
            //  NSLog(@"SQLite ROW for filling in cell");
            NSString *addDev = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];
            [lijstDevices addObject:addDev];
         }
         sqlite3_finalize(statement);
    }

    NSString *ciNaam = [lijstDevices objectAtIndex:section];

     NSString *querySQL2 = [NSString stringWithFormat:@"SELECT COUNT(ID) FROM Incidents WHERE CI='%@'", ciNaam];
     const char *query_stmt2 = [querySQL2 UTF8String];

     if (sqlite3_prepare_v2(contactDB, query_stmt2, -1, &statement, NULL) == SQLITE_OK)
     {
         //NSLog(@"SQLite ok in rowforindexpath");
         if(sqlite3_step(statement) == SQLITE_ROW) {
             //  NSLog(@"SQLite ROW for filling in cell");
             teller = sqlite3_column_int(statement, 0);
         }
         else
         {
              NSLog(@"Not.. good...");
         }
         sqlite3_finalize(statement);
      }
    sqlite3_close(contactDB);

}

Здесь возникает проблема: разделы заполнены правильно. Некоторым разделам нужен 1 ряд, другим разделам нужно 2 ряда. Всякий раз, когда я запускаю программу, каждый раздел, которому требуется 1 строка, заканчивается 0 строками, в то время как каждый раздел с 2 необходимыми строками заканчивается только 1 строкой.

Кроме того, у меня была ошибка, из-за которой таблицы не очищались. Поэтому, если я запускаю его дважды, база данных увеличивается вдвое. В этом случае каждый, который нуждался в 1, имеет 2 строки. Каждый из которых нуждался в 2, имел 4 ряда. Это, очевидно, уже не так, но это может помочь понять, что не так.

У кого-нибудь есть идеи ???

Ответы [ 2 ]

1 голос
/ 12 мая 2011

посмотрите этот пример и проверьте его

-(void)ChekInDataBase{
    sqlite3 *database;

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
    {   
        NSString *sqlStatement = [NSString stringWithFormat:@"SELECT count(id) as countRow FROM password"];

        sqlite3_stmt *compiledStatement;

        if(sqlite3_prepare_v2(database, [sqlStatement cStringUsingEncoding:NSUTF8StringEncoding], -1, &compiledStatement, NULL) == SQLITE_OK) 
        {
            NSLog(@"%@",sqlStatement);

            if (sqlite3_step(compiledStatement) == SQLITE_ROW) 
            {
                countRow = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement,0 )]intValue] ;
            }       
        }
        sqlite3_finalize(compiledStatement);

        if  (countRow > 0)
        {
            [yesBtnPressed setImage:[UIImage imageNamed:@"yes_tab_over.png"]forState:UIControlStateNormal];
            [noBtnPressed setImage:[UIImage imageNamed:@"no_tab.png"]forState:UIControlStateNormal];

            [noBtnPressed setUserInteractionEnabled:TRUE];
            [yesBtnPressed setUserInteractionEnabled:FALSE];
        }
        else    
        {  
            [yesBtnPressed setImage:[UIImage imageNamed:@"yes_tab.png"]forState:UIControlStateNormal];
            [noBtnPressed setImage:[UIImage imageNamed:@"no_tab_over.png"]forState:UIControlStateNormal];

            [noBtnPressed setUserInteractionEnabled:FALSE];
            [yesBtnPressed setUserInteractionEnabled:TRUE];
        }
        sqlite3_close(database);
    }       
}
0 голосов
/ 12 мая 2011

В этой строке не было ошибок.По-видимому, CI-код не был правильно добавлен в таблицу.Иногда он показывает правильный CI-код (тот, который я вижу в списке), но у остальных просто (ноль) или 1 как код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...