第七步:“预览数据”按钮的代码:
void CSQLiteTestDlg::OnBnClickedLookButton()
{
BOOL fTest;
CDbSQLite sqlite;
fTest = sqlite.Open(_T("theTestSqlite.db"));
if (!fTest)
{
AfxMessageBox(_T("打不开theTestSqlite.db"));
return;
}
CSqlStatement *stmt = sqlite.Statement(_T("SELECT * FROM usersInfo"));
//当数据不为空的时候,填充LIST控件
if (stmt != NULL)
{
m_ListCtrl.DeleteAllItems(); //清除LIST项
while(m_ListCtrl.DeleteColumn(0));//清除LIST列项
CRect rect;
m_ListCtrl.GetWindowRect(&rect); //获得LIST控件大小
int nFields = stmt->Fields(); //取得数据库表的列数
int nWidth = (rect.Width() - rect.Width() * 0.02) / nFields; //平均分布列数
int nCol = 0;
int nRow = 0;
CString szText;
for(nCol = 0; nCol < nFields; nCol++)
{
szText = stmt->FieldName(nCol); //得到列名
m_ListCtrl.InsertColumn(nCol, szText, LVCFMT_LEFT, nWidth, nCol);
}
while (stmt->NextRow())
{
szText = stmt->ValueString(0); //得到列值
m_ListCtrl.InsertItem(nRow, szText);
for(nCol = 1; nCol < nFields; nCol++)
{
szText = stmt->ValueString(nCol); //得到列值
m_ListCtrl.SetItem(nRow, nCol, LVIF_TEXT, szText, 0, 0, 0, 0);
}
++nRow;
}
}
delete stmt;
UpdateData(FALSE);
}
请问通过id查寻 一个数据项的值如SELECT name FROM WHERE id='6';这里的显示输出如代码如何写?
/*********************************
功能
执行一条查询语句,返回结果集
参数
sqlStr:需要执行的SQL语句
pDataTable:【out】返回的数据集
errMsg:【out】返回的错误信息
返回
*********************************/
int CMyDatabase::query(char *sqlStr, CDataTable *pDataTable, char **errMsg)
{
int result;
char **dbResult; //是 char ** 类型,两个*号
int nRow, nColumn;
int i , j;
int index;
result = sqlite3_get_table( m_pDb, sqlStr, &dbResult, &nRow, &nColumn, errMsg);
if (result == SQLITE_OK)
{
index = nColumn;
//前面说过 dbResult 前面第一行数据是字段名称,从 nColumn 索引开始才是真正的数据
for( i = 0; i < nRow ; i++ )
{
CDataRow dr;
for( j = 0 ; j < nColumn; j ++)
{
//printf("字段名:%s 字段值:%s\n", dbResult[j], dbResult[index] );
if (dbResult[index])
{
dr.addColumn(dbResult[j], dbResult[index]);
index++;
}
}
if (pDataTable && dr.getColumns() > 0)
pDataTable->addRow(&dr);
}
}
sqlite3_free_table( dbResult );
return result;
}
非常感觉你的解答!这代码在MFC 上还要做改动才能运行,也许是我把问题想得太简单了,我用的是老外封装过的类,在网上百度“VC连接SQLite3的方法(MFC封装类)得到的,本以为就一两句代码就可以搞定的事,结果百度查了很久都没有结果,要么他封装的类没有这个功能,要么只能分析他的类成员功能。如果要分析的他的类的话,我想还不如直接用原库的API,因为这样网上的解答基本都能找到,别人也能帮上忙。
非常感谢oyljerry解答! 一时没明白过来这是个回调函数,现在知道了,你是用SQLite3 API 的方法来解决这上问题,刚开始自己不想头痛就用了别人封的类。
结果却是把自己累得够狠。后来我细看了一下SQLite3 API 才明白自己用API更方便,现在才明白oyljerry的思路。谢谢!怎么这个没有结贴功能?我要结贴了!