2009-03-30 3 views
1
void max_min(sqlite3 *db) 
{ 
    //call back********* 
    int i, ncols; 
    sqlite3_stmt *stmt; 
    char *sql; 
    const char *tail; 
    char *zErrMsg = 0; 
    int rc; 
    //****************** 

    //min/max variables 
    char min[20]; 
    char max[20]; 




    //we want only the min and max value of this table 
    sql = "SELECT MIN(Start),MAX(End)FROM GMTI;"; //doesn't extract but works in GUI tool? 

    //sql = "SELECT * FROM GMTI WHERE Start<16;"; //works? 

    rc = sqlite3_prepare(db, sql, strlen(sql), &stmt, &tail); 
     if(rc != SQLITE_OK){ 
      fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db)); 
     } 

    rc = sqlite3_step(stmt); 
    ncols = sqlite3_column_count(stmt); 
    printf("Number of columns: %d and row status: %d", ncols, rc); 
    while(rc == SQLITE_ROW){ 
     for(i=0; i<ncols; i++){ 
        if (strncmp("Start", sqlite3_column_name(stmt,i), strlen("Start")) == 0) 
        { 
         strncpy(min, sqlite3_column_text(stmt,i), strlen(sqlite3_column_text(stmt,i))); 
         strcpy(min + strlen(sqlite3_column_text(stmt,i)), "\0"); 
         printf("min is: %s\n", min); 
         printf("<br>"); 
        } 
        if (strncmp("End", sqlite3_column_name(stmt,i), strlen("End")) == 0) 
        { 
         strncpy(max, sqlite3_column_text(stmt,i), strlen(sqlite3_column_text(stmt,i))); 
         strcpy(max + strlen(sqlite3_column_text(stmt,i)), "\0"); 
         printf("max: %s\n", max); 
         printf("<br>"); 
        } 


     }//end for 

     fprintf(stderr, "\n"); 
    rc = sqlite3_step(stmt); 
    }//end while 

    sqlite3_finalize(stmt); 

} 

Wenn ich die obige SQL-Abfrage mit den MIN- und MAX-Funktionen verwende, wird nichts für min und max ausgegeben. Wenn ich eine der anderen Anweisungen dort auskommentiert, funktioniert es wie erwartet und druckt die ausgewählte Abfrage.
Was ist anders an Max und Min in der Abfrage, dass es die Werte nicht extrahieren kann? Ist es nicht im Tabellenformat?
Außerdem habe ich die problematische Abfragezeichenfolge in einem SqLite-Datenbankbrowser in der gleichen Datenbank getestet, und es funktioniert, wobei die Werte für zwei Minuten und maximal angezeigt werden.Es wird nichts aus der SQlite-Tabelle extrahiert?

Alle Vorschläge würden sehr geschätzt werden.

Danke.

Antwort

2

Versuchen Sie, die zurückgegebenen Spaltennamen auszudrucken. Vielleicht sind sie nicht gleich "Start" und "Ende", wie Sie angenommen haben?

+0

Ich kann die Daten unter dem Anfang und am Ende drucken, indem Sie einfach die andere Select * from Tabelle verwenden. Es ist, wenn ich die MIN und MAX gebe es ein Problem ... –

+0

Das ist mein Punkt - vielleicht sind die Spaltennamen "MIN (Start)" und "MAX (Ende)" anstatt "Start" und "End" wie Sie habe angenommen. –

+0

+1: Spaltennamen nicht, was angenommen wurde. Muss Fakten sammeln. –

0

Vielleicht sollten Sie ein Leerzeichen zwischen MAX (End) und FROM hinzufügen?

Verwandte Themen