高分求救:关于sqlite3的语句sqlite3_exec(db, "SELECT single_data.* FROM single_data;", print_result, NULL, &errMsg);
1.sqlite3_exec(db, "SELECT single_data.* FROM single_data;", CallResult, NULL, &errMsg);
print_result函数是如何执行的?是每读取一行执行一次吗?
2.做了一个MFC读数据库界面,主要代码如下
//CallResult为回调函数,声明为类CVisualTabInterfaceDlg的友员函数,m_ListCtrl为类的静态成员变量,且被关联到CListCtrl控件
int CallResult(void *data, int n_columns,char **column_values, char **column_names)
{
if(CVisualTabInterfaceDlg::IsShouItemName)
{
CString strInit(*(column_names));
int nItem=CVisualTabInterfaceDlg::m_ListCtrl.InsertItem(0,strInit);
for (int i=1; i <n_columns; i++)
{
CString str(*(column_names+i));
CVisualTabInterfaceDlg::m_ListCtrl.SetItemText(nItem,i,str);
}
CVisualTabInterfaceDlg::IsShouItemName=false;
}
else
{
for (int i=0; i <n_columns; i++)
{
CString strInit(*(column_values));
int nItem=CVisualTabInterfaceDlg::m_ListCtrl.InsertItem(0,strInit);
for (int i=1; i <n_columns; i++)
{
CString str(*(column_values+i));
CVisualTabInterfaceDlg::m_ListCtrl.SetItemText(nItem,i,str);
}
}
}
return 0;
}
void CVisualTabInterfaceDlg::OnBnClickedBtnSelect()
{
......
char sqliteSentence[200];
char *errMsg;
sprintf_s(sqliteSentence,"select single_data.* from %s","single_data");
rc=sqlite3_exec(db,sqliteSentence,NULL,NULL,NULL);
if(rc)
{
CString str;
str.Format(_T("%s"),sqlite3_errmsg(db));
AfxMessageBox(str);
}
sqlite3_exec(db,sqliteSentence,CallResult, NULL, &errMsg);
......
}
选择要显示的数据表结构如下:
ID NAME MONEY POWER
1001 TOM 200 2000
1002 BILL 300 2600
但显示在列表控件里的只有ID=1002的内容,切重复显示为:
第一列 第二列 第三列 第四列
1002 BILL 300 2600
1002 BILL 300 2600
1002 BILL 300 2600
1002 BILL 300 2600
ID NAME MONEY POWER
请问为什么ID=1002的显示的4行,而1001没有显示.
如果在CallResult()的最外层加上for(int i=0;i <3;i++)时,则ID=1001 和ID =1002均显示多行?
请问这是怎么回事?多谢了