Also ich versuche, SQLite mit MFC-Dialogen in Visual Studio 2010 zu verwenden. Ich bin unklar, wie die Rückruffunktion zu verwenden, um das Ergebnis der Abfrage zu speichern, die versucht wird Zählen Sie die Anzahl der Tabellen in meiner Datenbank in die Variable m_Results. Gibt es das überhaupt, oder muss ich trotzdem auf die Variable nTables zugreifen?C++ MFC SQLite sqlite3_exec Callback
static int callback(void *data, int argc, char **argv, char **azColName){
int i;
fprintf(stderr, "%s: ", (const char*)data);
data = argv[0];
return 0;
}
BOOL CDBpracticeDlg::OnInitDialog(){
...
// TODO: Add extra initialization here
sqlite3 *db;
char *zErrMsg = 0;
int rc;
char *sql;
const char* data = "Callback function called";
rc = sqlite3_open("structInfo_Test.db", &db);
if(rc){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return(0);
}else{
fprintf(stderr, "Opened database successfully\n");
}
/* Create SQL statement */
sql = "Select Count(*) as nTables FROM sqlite_master where type='table';";
/* Execute SQL statement */
rc = sqlite3_exec(db, sql, callback, &m_Results, &zErrMsg);
if(rc != SQLITE_OK){
char error[200];
strcpy(error,"SQL error: ");
strcat(error,zErrMsg);
m_Results = error;
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
fprintf(stdout, "Operation done successfully\n");
}
UpdateData(FALSE);
sqlite3_close(db);
return TRUE; // return TRUE unless you set the focus to a control
}
Danke für Ihre Antwort. Ich habe versucht, Sie Lösung, aber ich bekam Fehler mit der Ergebnisse + = columnNames [index]; Wie verketten Sie zwei Zeiger? –
@ J.Ting: Übergeben Sie den CString an die Funktion. Warum sollten Sie sich mit den Zeigern beschäftigen, wenn Sie bereits MFC – cha
@J.Ting haben: Da Sie uns nie gesagt haben, welcher Typ 'm_Results' ist, musste ich einen annehmen. Diese Antwort demonstrierte, wie Daten an den Rückruf übergeben werden. Sie müssen die Details zur Verwendung dieser Daten selbst ausarbeiten. – IInspectable