Bei mehr als 3 Zeilen ..



  • Hallo
    Bei mehr als 3 Zeilen in einer Datenbank hängt sich mein Programm auf
    (Windows Fenster)

    int dbcallback(void *userdata, int col_num, char **col_value, char **col_name) 
    { 
        int *num_records = userdata; 
    	char buff[500];
    
        sprintf(buff,"%s | %s | %s | %s |", 
                col_value[0], 
                col_value[1], 
                col_value[2], 
                col_value[3]  
              ); 
    	MessageBox(NULL,buff,buff,0); //TEST
    
        (*num_records)++; 
    
        return 0; 
    	}
    
    void print_db(sqlite3 *db) 
    { 
        int num_records = 0;
    	int ret; 
        char *sql_msg_err = NULL; 
    	char buffer[24];
    
        ret = sqlite3_exec(db, 
                "SELECT * FROM test", 
                dbcallback, 
                &num_records, 
                &sql_msg_err); 
    
        if(ret != SQLITE_OK) 
        { 
            MessageBox(NULL,sql_msg_err, "SQL error: ", 0); 
            sqlite3_free(sql_msg_err); 
        } 
    
        	sprintf(buffer,"Zeilen: %d", num_records); 
    	SetWindowText(GetDlgItem(hwnd,ID_EDIT_COUNT),buffer);
    } 
    /*AUFRUF MIT*/ print_db(db);
    

    Bei einem Consolenprog. funktioniert alles einwandfrei
    (Alle 10 Einträge werden ausgewertet.

    //TESTPROGRAMM
    #include <stdio.h>
    #include <sqlite3.h>
    
    int dbcallback(void *userdata, int col_num, char **col_value, char **col_name) 
    { 
        int *num_records = userdata; 
    
        printf("%s | %s | %s | %s |\n", 
                col_value[0],  
                col_value[1],   
                col_value[2],   
                col_value[3]); 
    
        (*num_records)++; 
    
        return 0;  
    	}
    
    void print_db(sqlite3 *db) 
    { 
        int num_records = 0;
    	int ret; 
        char *sql_msg_err = NULL; 
    
        ret = sqlite3_exec(db, 
                "SELECT * FROM test", 
                dbcallback, 
                &num_records, 
                &sql_msg_err); 
    
        if(ret != SQLITE_OK) 
        { 
            printf( "SQL error: %s", sql_msg_err); 
            sqlite3_free(sql_msg_err); 
        } 
    
        printf("Zeilen: %d\n", num_records); 
    
    } 
    
    int main(void)
    {
    	static sqlite3 *db;
    	char Database[]="usv.db";
    
    	sqlite3_open(Database, &db);
    
    	print_db(db);
    
    	sqlite3_close(db);
    
    	return 0;
    }
    

    An was kann das liegen?? 😕
    lg MAXX



  • Kannst Du Dich da mal mit einem Debugger durchsteppen?
    Reicht denn die Größe von buff in dbcallback mit 500 bytes? Mal den sprintf() auskommentieren und in der MessageBox "Hello" ausgeben lassen.



  • Danke
    Buffer ist groß genug; MessageBox funkt nicht, glaube hat was mit <windows> zu tun.



  • @_MAXX175
    compilierst du das als C oder wie soll die zuweisung "int *num_records = userdata" ohne cast funktionieren?



  • @ hustbear :
    funktioniert aber

    int *num_records=(int*)userdata
    

    Hab mein Problem jetzt mit

    sqlite3_prepare(...
    

    und

    sqlite3_steb(..
    

    gelöst
    lg MAXX175


Anmelden zum Antworten