0
Visual Studio 2010でMFCダイアログでSQLiteを使用しようとしています。コールバック関数を使用してクエリの結果を保存する方法が不明です私のデータベース内のテーブルの数を変数m_Resultsに数えます。とにかくこれを行うには、またはnTables変数にアクセスするためにとにかく私にはありますか?C++ MFC SQLite sqlite3_execコールバック
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
}
あなたの答えをありがとう。私はあなたに解決策を試みましたが、エラーが発生しました。 results + = columnNames [index]; 2つのポインタをどのように連結しますか? –
@ J.Ting:関数にCStringを渡します。なぜあなたは既にMFCを持っているのであれば、ポインタに気をつけているでしょう – cha
@ J.Ting:あなたは私たちに何も言わなかったので、どんなタイプの 'm_Results'があるのでしょうか?この回答は、データをコールバックに渡す方法を示しました。あなたは、そのデータを自分で使用する際の詳細を調べなければなりません。 – IInspectable