vc++访问数据库

BOOLCDIALG_COURSE::OnInitDialog(){CDialog::OnInitDialog();//TODO:Addextrainitializati... BOOL CDIALG_COURSE::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
m_content.InsertColumn(0,"学号"); // 初始化列名
m_content.InsertColumn(1,"课程号");
m_content.InsertColumn(2,"姓名");

RECT rect;

m_content.GetWindowRect(&rect);
int wid=rect.right-rect.left;

m_content.SetColumnWidth(0,wid/3);
m_content.SetColumnWidth(1,wid/3);
m_content.SetColumnWidth(2,wid/3);

m_content.SetExtendedStyle(LVS_EX_FULLROWSELECT);
RefreshData();

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

void CDIALG_COURSE::RefreshData()
{
CDatabase m_database;
m_content.DeleteAllItems();
CScSet m_recordset(&m_database);
CString strSQL;
strSQL.Format("select * from sc");
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
CDBVariant varValue;
if (m_recordset.GetRecordCount()!=0)
m_recordset.MoveFirst();

//症结就在于此!!
/*
int i=0;
if(!m_recordset.IsEOF()) {
int temp=0;
m_recordset.GetFieldValue(temp,varValue);
m_content.SetItemText(i,0,varValue.m_pstring->GetBuffer(1));

m_recordset.GetFieldValue(1,varValue);
m_content.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));

m_recordset.GetFieldValue(2,varValue);
m_content.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));

m_recordset.MoveNext(); // 移动到下一条记录
i++;
}*/

}

第一,上面初始化列名后,在运行后看不到预计的结果。
第二,在RefreshData()中,从int i=0;开始的代码,如果加上,运行,连接数据库时,就会弹出无

效的列名!!如果将这些代码不运行后,就只弹出个窗口,所有代码没有一点用!
第一点已经解决了,是我列表控件(一个style属性的原因)没设置好!第二点依然是那样,无法读出列!!
展开
 我来答
百度网友ecba46aab
2010-06-19 · TA获得超过2303个赞
知道大有可为答主
回答量:2477
采纳率:100%
帮助的人:1978万
展开全部
m_recordset.GetRecordCount()一定是0
这个数目是你访问过的数目.

MoveFrist是没有必要的.
因为打开后,自动会在开始处

建议你看一下我的免费教程(视频\习题\讲义\教材)
VC共享乐园有哦
cuibingbo
2010-06-19 · TA获得超过230个赞
知道答主
回答量:158
采纳率:0%
帮助的人:169万
展开全部
你的表中对应列定义的属性类型是什么嘛,要和你写入的类型一致:
m_listDevice.InsertColumn(0, "编号", LVCFMT_LEFT, wid/12);
m_listDevice.InsertColumn(1, "设备名称", LVCFMT_LEFT, wid/6);
m_listDevice.InsertColumn(2, "设备数量", LVCFMT_LEFT, wid/8);
m_listDevice.InsertColumn(3, "采购时间", LVCFMT_LEFT, wid/8);
m_listDevice.InsertColumn(4, "采购人员", LVCFMT_LEFT, wid/8);
m_listDevice.InsertColumn(5, "设备总价", LVCFMT_LEFT, wid/8);
m_listDevice.InsertColumn(6, "是否借出", LVCFMT_LEFT, wid/8);
m_listDevice.InsertColumn(7, "借出人", LVCFMT_LEFT, wid/8);
m_listDevice.InsertColumn(8, "借出时间", LVCFMT_LEFT, wid/8);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gww1bd
2010-06-19 · TA获得超过303个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:0
展开全部
看看CRecordset::GetFieldValue的重载:
void GetFieldValue(
LPCTSTR lpszName,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE
);
void GetFieldValue(
short nIndex,
CDBVariant& varValue,
short nFieldType = DEFAULT_FIELD_TYPE
);

你的程序是匹配上了第一个重载函数。

将tmp改为short类型,或强转为short型试试:
m_recordset.GetFieldValue((short)temp,varValue);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式