Thread overview |
---|
July 29, 2004 I could use some help with SQLite3 | ||||
---|---|---|---|---|
| ||||
I hope someone can help me with sqlite3. Maybe someone has been doing it succesfully and can show me how they did it, or maybe someone can explain what i am doing wrong in my own test. Because i can't figure out how i should use the callback function of sqlite3. The code does compile without errors. But when i start the program it gives the error message: "Error: Access Violation" Also the numCols always returns 1 no matter how many columns there are. And if i try to writef the results then i get a wrong set of characters and the error message: "Error: invalid UTF-8 sequence" And if i try to do the same with columnNames then i get the error message: "Error: ArrayBoundsError test.d(9)" Here is my code: import std.stdio; import sqlite3_imp; int DoTheCallback (void* NotUsed, int numCols , char[][] results, char[][] columnNames) { writef("number of colomns: ", numCols, "\n"); return 0; }; int main() { sqlite3* db; sqlite3_open("test.db", &db); sqlite3_exec(db, "SELECT * FROM account" ,cast(sqlite_callback) &DoTheCallback, null, null); sqlite3_close(db); return 0; } |
July 29, 2004 Re: I could use some help with SQLite3 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mista | "Mista" <stoop@hotpop.com> wrote in message news:ceb8pu$1i9n$1@digitaldaemon.com... > I hope someone can help me with sqlite3. > Maybe someone has been doing it succesfully and can show me how they did > it, or maybe someone can explain what i am doing wrong in my own test. > Because i can't figure out how i should use the callback function of > sqlite3. > The code does compile without errors. > But when i start the program it gives the error message: "Error: Access > Violation" > Also the numCols always returns 1 no matter how many columns there are. > And if i try to writef the results then i get a wrong set of characters > and the > error message: "Error: invalid UTF-8 sequence" > And if i try to do the same with columnNames then i get the error message: > "Error: ArrayBoundsError test.d(9)" > > > > Here is my code: > > > import std.stdio; > import sqlite3_imp; > > > int DoTheCallback (void* NotUsed, int numCols , char[][] results, > char[][] columnNames) > { > writef("number of colomns: ", numCols, "\n"); > return 0; > }; > > > int main() > { > sqlite3* db; > sqlite3_open("test.db", &db); > sqlite3_exec(db, "SELECT * FROM account" ,cast(sqlite_callback) > &DoTheCallback, null, null); > sqlite3_close(db); > return 0; > } > Your callback function is incorrect and your cast is telling the compiler to ignore it. Use this and don't cast it: extern(C) int DoTheCallback(void* pArg, int numCols, char** results, char** columnNames) { writef("number of colomns: ", numCols, "\n"); for(int i = 0; i != numCols; i++) { writef("Column '%s' result is: %s\n", toString(columnNames[i]), toString(results[i])); } return 0; } |
July 29, 2004 Re: I could use some help with SQLite3 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vathix | Thank you, that did the trick. It would be great if the callback part could be included in the example on http://www.dprogramming.com/sqlite.php Maybe there will be more people who will find this info usefull. Or maybe i am the only one who can't figure out that i should use extern(C) :D Vathix wrote: > "Mista" <stoop@hotpop.com> wrote in message > news:ceb8pu$1i9n$1@digitaldaemon.com... > >>I hope someone can help me with sqlite3. >>Maybe someone has been doing it succesfully and can show me how they did >>it, or maybe someone can explain what i am doing wrong in my own test. >>Because i can't figure out how i should use the callback function of >>sqlite3. >>The code does compile without errors. >>But when i start the program it gives the error message: "Error: Access >>Violation" >>Also the numCols always returns 1 no matter how many columns there are. >>And if i try to writef the results then i get a wrong set of characters >>and the >>error message: "Error: invalid UTF-8 sequence" >>And if i try to do the same with columnNames then i get the error message: >>"Error: ArrayBoundsError test.d(9)" >> >> >> >>Here is my code: >> >> >>import std.stdio; >>import sqlite3_imp; >> >> >>int DoTheCallback (void* NotUsed, int numCols , char[][] results, >>char[][] columnNames) >> { >> writef("number of colomns: ", numCols, "\n"); >> return 0; >> }; >> >> >>int main() >> { >> sqlite3* db; >> sqlite3_open("test.db", &db); >> sqlite3_exec(db, "SELECT * FROM account" ,cast(sqlite_callback) >>&DoTheCallback, null, null); >> sqlite3_close(db); >> return 0; >> } >> > > > Your callback function is incorrect and your cast is telling the compiler to > ignore it. Use this and don't cast it: > > > extern(C) int DoTheCallback(void* pArg, int numCols, char** results, char** > columnNames) > { > writef("number of colomns: ", numCols, "\n"); > > for(int i = 0; i != numCols; i++) > { > writef("Column '%s' result is: %s\n", toString(columnNames[i]), > toString(results[i])); > } > return 0; > } > > |
Copyright © 1999-2021 by the D Language Foundation