菜鸟学习数据库编程问题之-001 在DAO中,如何将COleVariant转变成CString ?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 COleVariant v3 = "字符串";CString str =(BSTR)v3.pbstrVal; ‘VC数据库编程’中,关于DAO编程一节中://编写“物品管理>查看”菜单命令的响应函数OnStuffView()。OnStuffView()函数从“物品”表里读取物品数据,将这些数据显示在视图里。函数的代码如下:void CDAODemoView::OnStuffView() { // 设置当前操作的数据库表名称 m_strTableName = _T("物品"); // 监测DAO数据库对象的有效性,并在记录集对象打开时关闭该记录集 if(!m_pDatabase->IsOpen()) return; if(!m_pRecordset) return; if(m_pRecordset->IsOpen()) m_pRecordset->Close(); // 清除所有视图上的显示 CListCtrl& ctlList = (CListCtrl&)GetListCtrl(); EraseList(); // 取表的结构信息 CDaoFieldInfo fieldInfo; int nFields; CDaoTableDef td(m_pDatabase); try { td.Open(m_strTableName); nFields = td.GetFieldCount(); for (int j=0; j < nFields; j++){ td.GetFieldInfo(j,fieldInfo); int nWidth = ctlList.GetStringWidth(fieldInfo.m_strName) + 15; ctlList.InsertColumn(j,fieldInfo.m_strName, LVCFMT_LEFT, nWidth); } } catch (CDaoException* e) { e->ReportError(); e->Delete(); return; } td.Close(); // 取表的数据 int nItem = 0; try { CString strSelect(_T("Select * From [")); strSelect += m_strTableName; strSelect += _T("]"); m_pRecordset->Open(dbOpenDynaset,strSelect); while (!m_pRecordset->IsEOF()) { COleVariant var; var = m_pRecordset->GetFieldValue(0); ctlList.InsertItem(nItem,CCrack::strVARIANT(var)); for (int i=0; i < nFields; i++){ var = m_pRecordset->GetFieldValue(i); ctlList.SetItemText( nItem,i,CCrack::strVARIANT(var)); } nItem++; m_pRecordset->MoveNext(); } } catch (CDaoException* e) { e->ReportError(); e->Delete(); return; } // 显示信息 CString strRecCount; strRecCount.Format(_T("显示了%d条记录。"),nItem); UpdateWindow(); if (nItem>=MAXRECORDS) MessageBox(strRecCount); ((CFrameWnd *) AfxGetMainWnd())->SetMessageText(strRecCount); }1,其中var = m_pRecordset->GetFieldValue(0);设为‘0’程序异常,‘1’则OK;同样在 for (int i=0; i < nFields; i++)循环中,i也不可为‘0’。这是为什么呢?2,EraseList();CCrack::strVARIANT(var),这二个是笔误吗,VC中没有这样的函数呀。3,使用了二楼的转换后,出来的是乱码。请高手给指点一下,并交个朋友,非常感谢!!!!!!!!!!!! listctrl显示大量数据 请问MFC擅长开发哪类程序 CListView如何让每一行是可编辑的文本或者一个下拉列表? 静态链接执行出错,动态链接没有问题。 ********每天散20分,第10个人进来后结贴,为的是细水长流************** 有关CImageList的析构问题 怎样从CWinApp类中取行Doc类? 请教vc中 使用vector的问题 关于Excel的老问题 怎样响应微调控件的上、下按钮? 我要晕倒 我做了个socket通信程序,vc.net下直接运行能联到服务器,debug和release下执行exe,不行
CString str =(BSTR)v3.pbstrVal;
编写“物品管理>查看”菜单命令的响应函数OnStuffView()。
OnStuffView()函数从“物品”表里读取物品数据,将这些数据显示在视图里。函数的代码如下:
void CDAODemoView::OnStuffView()
{
// 设置当前操作的数据库表名称
m_strTableName = _T("物品");
// 监测DAO数据库对象的有效性,并在记录集对象打开时关闭该记录集
if(!m_pDatabase->IsOpen()) return;
if(!m_pRecordset) return;
if(m_pRecordset->IsOpen()) m_pRecordset->Close();
// 清除所有视图上的显示
CListCtrl& ctlList = (CListCtrl&)GetListCtrl();
EraseList();
// 取表的结构信息
CDaoFieldInfo fieldInfo;
int nFields;
CDaoTableDef td(m_pDatabase);
try
{
td.Open(m_strTableName);
nFields = td.GetFieldCount();
for (int j=0; j < nFields; j++){
td.GetFieldInfo(j,fieldInfo);
int nWidth = ctlList.GetStringWidth(fieldInfo.m_strName) + 15;
ctlList.InsertColumn(j,fieldInfo.m_strName,
LVCFMT_LEFT, nWidth);
}
}
catch (CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
td.Close();
// 取表的数据
int nItem = 0;
try
{
CString strSelect(_T("Select * From ["));
strSelect += m_strTableName;
strSelect += _T("]");
m_pRecordset->Open(dbOpenDynaset,strSelect);
while (!m_pRecordset->IsEOF()) {
COleVariant var;
var = m_pRecordset->GetFieldValue(0);
ctlList.InsertItem(nItem,CCrack::strVARIANT(var));
for (int i=0; i < nFields; i++){
var = m_pRecordset->GetFieldValue(i);
ctlList.SetItemText( nItem,i,CCrack::strVARIANT(var));
}
nItem++;
m_pRecordset->MoveNext();
}
}
catch (CDaoException* e)
{
e->ReportError();
e->Delete();
return;
}
// 显示信息
CString strRecCount;
strRecCount.Format(_T("显示了%d条记录。"),nItem);
UpdateWindow();
if (nItem>=MAXRECORDS) MessageBox(strRecCount);
((CFrameWnd *) AfxGetMainWnd())->SetMessageText(strRecCount);
}
1,其中var = m_pRecordset->GetFieldValue(0);设为‘0’程序异常,‘1’则OK;同样在 for (int i=0; i < nFields; i++)循环中,i也不可为‘0’。这是为什么呢?
2,EraseList();CCrack::strVARIANT(var),这二个是笔误吗,VC中没有这样的函数呀。
3,使用了二楼的转换后,出来的是乱码。
请高手给指点一下,并交个朋友,非常感谢!!!!!!!!!!!!