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属性的原因)没设置好!第二点依然是那样,无法读出列!! 展开
{
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属性的原因)没设置好!第二点依然是那样,无法读出列!! 展开
3个回答
展开全部
你的表中对应列定义的属性类型是什么嘛,要和你写入的类型一致:
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);
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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看看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);
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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询