读取数据库可以用ado来读取,有接口,显示的话用API显示就行
解决方案 »
- 如何发送alt+ctrl+enter消组合键消息
- 如何与网页上的ActiveX控件交互。
- strncpy(a,b,-2)不抛出异常程序直接退出。
- 如何让程序使用自带的字库?(50 可以再加分)
- 颜色混合问题!
- 分多僧少,又刚来不久,只能再开个贴,无他,散
- 我现在想学编程,我什么基础都没有,我该从哪个开始学?第一部学什么?第二步学什么?然后学什么?
- MFC按钮贴图碰到的问题
- 怎么样这vc种实现用对话框选择多个文件,然后在对他们重命名
- 急!请问谁有PowerBuilder的运行连接库pbvm60.dll,请mail 给我
- linux下编译vlc,curl出错
- vs2010 ODBC使用问题(1、导入记录集类出错;2、movenext出错),紧急求助
{
// 初始化表格
SetExtendedStyle( LVS_EX_FULLROWSELECT/* | LVS_EX_GRIDLINES*/ ); // 添加列
LVCOLUMN column;
column.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH;
column.fmt = LVCFMT_CENTER;
//column.pszText = (LPTSTR)lpszColumnHeading;
//column.cx = nWidth; const int txtnum = 100;
wchar_t txt[txtnum] = _T("ID"); column.pszText = txt;
column.cx = 0;
InsertColumn(1, &column); // ID, 列宽为0,不显示,程序用。 ::LoadString( theApp.m_hInstance, IDS_NUMBER, txt, txtnum );
column.cx = 70;
InsertColumn(2, &column); ::LoadString( theApp.m_hInstance, IDS_STRID, txt, txtnum );
column.cx = 140;
InsertColumn(3, &column); ::LoadString( theApp.m_hInstance, IDS_STRNAME, txt, txtnum );
column.cx = 100;
InsertColumn(4, &column); ::LoadString( theApp.m_hInstance, IDS_STRGENDER, txt, txtnum );
column.cx = 70;
InsertColumn(5, &column); ::LoadString( theApp.m_hInstance, IDS_BIRTHDAY, txt, txtnum );
column.cx = 110;
InsertColumn(6, &column); ::LoadString( theApp.m_hInstance, IDS_AGE, txt, txtnum );
column.cx = 70;
InsertColumn(7, &column); ::LoadString( theApp.m_hInstance, IDS_STRREGDATE, txt, txtnum );
column.cx = 110;
InsertColumn(8, &column); ::LoadString( theApp.m_hInstance, IDS_SCANDATE, txt, txtnum );
column.cx = 110;
InsertColumn(9, &column); ::LoadString( theApp.m_hInstance, IDS_IMPORTDAY, txt, txtnum );
column.cx = 110;
InsertColumn(10, &column); ::LoadString( theApp.m_hInstance, IDS_SCANCOUNT, txt, txtnum );
column.cx = 80;
InsertColumn(11, &column); ::LoadString( theApp.m_hInstance, IDS_COMPANY, txt, txtnum );
column.cx = 180;
InsertColumn(12, &column); ::LoadString( theApp.m_hInstance, IDS_REGNOTE, txt, txtnum );
column.cx = 300;
InsertColumn(13, &column); // 设置排序小图标
CHeaderCtrl* pHdrCtrl = GetHeaderCtrl();
pHdrCtrl->SetImageList( &m_imgSort ); // 设置排序小图标 /*// 初状态是扫描时间排降序。
HDITEM hdi;
pHdrCtrl->GetItem(8, &hdi); // 初状态是扫描时间排降序。
hdi.iImage = 1;
hdi.mask |= HDI_IMAGE;
hdi.fmt |= HDF_IMAGE | HDF_BITMAP_ON_RIGHT;
pHdrCtrl->SetItem( 8, &hdi );*/ return true;
}bool ViewList::filllist( int page )
{
if( page < 0 )
page = 0;
else if( page > GetPagesCount() )
page = m_nPagesCount; // 上一句的GetPagesCount()中更新了m_nPagesCount if( page == this->m_nPageNum )
return true; m_nPageNum = page; DeleteAllItems();
UpdateData(); // 先更新,表现出动态更新过程 m_pRibbonCategory->SetEditInt( ID_PAGE_NUMBER, m_nPageNum + 1 ); //!! 从基类强制转换到子类,不能使用子类的变量等,只能用方法。 Cdaquizzee2 ds;
CString sqlstr;
sqlstr.Format( L"WHERE 1%s%s ORDER BY %s LIMIT %i, %i;",
m_strFilterDate,
m_strFilterInfo,
m_strOrderby,
m_nCountOfPage * m_nPageNum,
m_nCountOfPage); if( ds.Open2( sqlstr ) == FALSE )
{
return false;
} if( !ds.GetRecordCount() )
{
ds.Close();
return true; // 没有记录时直接返回。
} int num = m_nCountOfPage * m_nPageNum + 1;
ds.MoveFirst();
for( int i = 0; !ds.IsEOF(); i++, num++ )
{
InsertItem( i, ds.m_ID );
CString str, str2, str3;
str.Format(L"%i", num);
SetItemText( i, 1, str );
SetItemText( i, 2, ds.m_number );
SetItemText( i, 3, ds.m_name );
SetItemText( i, 4, ds.m_sexstr );
if( (ds.m_birthday.m_status != COleDateTime::valid) || (ds.m_birthday.m_dt == 0) ){
str = _T("");
str2 = _T("");
}
else
{
str = ds.m_birthday.Format( _T("%Y-%m-%d") );
str2.Format( L"%i", ds.m_age);
}
SetItemText( i, 5, str );
SetItemText( i, 6, str2 ); if( (ds.m_regday.m_status != COleDateTime::valid) || (ds.m_regday.m_dt == 0) )
str = _T("");
else
str = ds.m_regday.Format( _T("%Y-%m-%d") );
SetItemText( i, 7, str ); if( (ds.m_scanday.m_status != COleDateTime::valid) || (ds.m_scanday.m_dt == 0) || ds.m_scancount == 0 ) // 没有扫描次数时,不显示扫描日期。
str = _T("");
else
str = ds.m_scanday.Format( _T("%Y-%m-%d") );
SetItemText( i, 8, str ); if( (ds.m_importday.m_status != COleDateTime::valid) || (ds.m_scanday.m_dt == 0) )
str = _T("");
else
str = ds.m_importday.Format( _T("%Y-%m-%d") );
SetItemText( i, 9, str ); str.Format( L"%i", ds.m_scancount );
SetItemText( i, 10, str );
SetItemText( i, 11, ds.m_text1 );
SetItemText( i, 12, ds.m_note );
//SetItemData(i, i);
ds.MoveNext();
} ds.Close(); SetFocus(); // 填充完成后设置焦点。 return true;
}
using namespace ADODB;
2、com库初始化
在应用程序初始化函数中调用AfxOleInit()或CoInitialize(NULL)函数初始化com
在应用程序退出函数中调用CoUnInitialize()卸载com3、数据库连接(以Oracle为例)_ConnectionPtr m_pConnection(NULL);
_RecordsetPtr m_pRecordset(NULL);
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));TCHAR szConnect[256] = {0};
try
{
wsprintf(szConnect,_T("Provider=MSDAORA;Data Source=dbxxx;Password=xxxxx;User ID=xxxx;"));//本地数据库
_bstr_t strConnect(szConnect);
m_pConnection->Open(strConnect,_T(""),_T(""),adOpenUnspecified);
}catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
return FALSE;
}CString strSql = _T("select * from person_info");
BSTR bstrSql = strSql.AllocSysString();
m_pRecordset->Open(bstrSql,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);//插入表头
TCHAR szTitle[16][16] = {0}; //保存表头标题,实际应用中应动态生成
FieldsPtr pFields = m_pRecordset->Fields;
long nColCount(0);
pFields->get_Count(&nColCount);
FieldPtr fd(NULL);
_bstr_t bstrName;
for(long i=0;i<nColCount;++i)
{
FieldPtr pField=pFields->Item[i];
bstrName=pField->GetName();
lstrcpy(szTile[i],(LPCTSTR)bstrName);
m_list.InsertColumn(i,szTile[i],LVCFMT_CENTER,100);
}//插入数据
_variant_t var;
long i(0), j(0);
CString strBuf;
while(!m_pRecordset->adoEOF)
{
j = 0;
m_list.InsertItem(i,NULL);
for(j=0;j<nColCount;++j)
{
var = m_pRecordset->GetCollect(szTile[j]);
if(var.vt != VT_NULL)
{
strBuf = (LPCTSTR)_bstr_t(var);
strBuf.Trim();
m_list.SetItemText(i,j,strBuf.GetBuffer());
}
}
++i;
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
m_pConnection->Close();