I have a structure declared like:
I initialize the structure with this function:Code:typedef struct _sqlite { int rc; int ncol; int nrow; char *db_name; sqlite3 *db; sqlite3_stmt *stmt; char *query; int db_status; } SQL_handle;
My function to open the database with the structure is:Code:int init_sql_handle(SQL_handle **handle) { SQL_handle *new; new = safemalloc(sizeof(SQL_handle)); if(!new) { fprintf(stderr, "Couldn't allocate sql init memory, terminating!\n"); exit(255); } new->query = safestrdup("SELECT main.id, artists.artist, main.title, main.remixer, \ labels.label, main.year, genres.genre, main.proj, main.mark, classes.class, \ main.class_no from main, artists, genres, labels, classes WHERE \ main.artist=artists.artist_id AND main.label=labels.label_id AND \ main.genre=genres.genre_id AND main.class=classes.class_id LIMIT 20;"); new->db_name = safestrdup("music.db"); new->nrow = 0; new->rc = new->ncol = new->nrow = new->db_status = 0; *handle = new; }
My function to prepare the db statement is:Code:int open_db(SQL_handle **handle) { handle->rc = sqlite3_open(handle->db_name, &handle->db); if(handle->rc) { /* Print a pop-up screen for error. */ handle->db_status = close_db(handle->db); exit(1); } return 0; }
In main I call all three functions (in this order) like:Code:int prepare_db(SQL_handle **handle) { const char *tail; /* Does not affect the connection or database in any way. * It does not start a transaction or get a lock. * Ref: The Definitive Guide To SQL_handle, p. 216 */ handle->rc = sqlite3_prepare(handle->db, handle->query, strlen(handle->query), &handle->stmt, &tail); if(handle->rc != SQLITE_OK) { /* TODO: Handle error in db. */ exit(1); } return 0; }
...after creating the handle above main...Code:init_sql_handle(&handle); open_db(&handle); prepare_db(&handle);
When I compile, though, I get these errors:Code:SQL_handle *handle = NULL;
What am I doing wrong here??? I thought that I was to pass in a reference to the struct so that it could be modified. I could put these back into main but I wanted to use a function instead so I don't keep having to write the error checking.Code:gcc -g3 -c main.c gcc -g3 -c color.c gcc -g3 -c print.c gcc -g3 -c tree.c gcc -g3 -c window.c gcc -g3 -c sql.c sql.c: In function 'open_db': sql.c:33: error: request for member 'rc' in something not a structure or union sql.c:33: error: request for member 'db_name' in something not a structure or union sql.c:33: error: request for member 'db' in something not a structure or union sql.c:35: error: request for member 'rc' in something not a structure or union sql.c:37: error: request for member 'db_status' in something not a structure or union sql.c:37: error: request for member 'db' in something not a structure or union sql.c: In function 'prepare_db': sql.c:51: error: request for member 'rc' in something not a structure or union sql.c:51: error: request for member 'db' in something not a structure or union sql.c:51: error: request for member 'query' in something not a structure or union sql.c:51: error: request for member 'query' in something not a structure or union sql.c:51: error: request for member 'stmt' in something not a structure or union sql.c:53: error: request for member 'rc' in something not a structure or union make: *** [sql.o] Error 1
Also, in prepare_db and open_db, in sqlite3_prepare and sqlite3_open, how would I pass those parameters that require a reference to stmt and db? I passed the structure as a reference anyways. Thank you.



LinkBack URL
About LinkBacks



