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 aberint *num_records=(int*)userdata
Hab mein Problem jetzt mit
sqlite3_prepare(...
und
sqlite3_steb(..
gelöst
lg MAXX175