MFC OLEDB数据库

class CLinkInfo : public CCommand<CAccessor<CLinkInfoAccessor> >
{
public:
/
	//构造函数
	CLinkInfo () {
		//Allow 1 k for SQL WHERE clause
		memset(m_strFilter, 0, 50);
//		strcpy (m_strFilter, "");
	}

	HRESULT Open()
	{
		HRESULT		hr;

		hr = OpenDataSource();
		if (FAILED(hr))
			return hr;

		return OpenRowset();
	}
	HRESULT OpenDataSource()
	{
		HRESULT		hr;
		CDataSource db;
		CDBPropSet	dbinit(DBPROPSET_DBINIT);

		dbinit.AddProperty(DBPROP_AUTH_CACHE_AUTHINFO, true);
		dbinit.AddProperty(DBPROP_AUTH_ENCRYPT_PASSWORD, false);
		dbinit.AddProperty(DBPROP_AUTH_MASK_PASSWORD, false);
		dbinit.AddProperty(DBPROP_AUTH_PASSWORD, OLESTR(""));
		dbinit.AddProperty(DBPROP_AUTH_USERID, OLESTR("Admin"));
		dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR("E:\\AddressBook.mdb"));
		dbinit.AddProperty(DBPROP_INIT_MODE, (long)16);
		dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
		dbinit.AddProperty(DBPROP_INIT_PROVIDERSTRING, OLESTR(""));
		dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033);
		hr = db.Open(_T("Microsoft.Jet.OLEDB.4.0"), &dbinit);
		if (FAILED(hr))
			return hr;

		return m_session.Open(db);
	}
	HRESULT OpenRowset()
	{
		// Set properties for open
		CDBPropSet	propset(DBPROPSET_ROWSET);
		propset.AddProperty(DBPROP_IRowsetChange, true);
		propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);


		char newSQL[512];
		char *SQLCommand;
		GetDefaultCommand((const char **) &SQLCommand);
		strcpy(newSQL, SQLCommand);
		if (strlen(m_strFilter)) {
			strcat(newSQL, " WHERE ");
			strcat(newSQL, m_strFilter);
		}
		
		return CCommand<CAccessor<CLinkInfoAccessor> >
				::Open(m_session, newSQL, &propset);
		//return CCommand<CAccessor<CLinkInfoAccessor> >::Open(m_session, NULL, &propset);
	}
	HRESULT ExecuteSQL(char *sql)
	{
		// Set properties for open
		CDBPropSet	propset(DBPROPSET_ROWSET);
		propset.AddProperty(DBPROP_IRowsetChange, true);
		propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);

		CCommand<CAccessor<CLinkInfoAccessor> >   cmd;	
		HRESULT hr = cmd.Open(m_session, sql, NULL,NULL,DBGUID_SQL, FALSE);		
		return hr;
	}

	CSession	m_session;
	char	m_strFilter[50];
};

void CMyATLOLEDBDlg::ShowItem(CString strFilter)
{

	HRESULT		hr;
	m_listLinkInfo.DeleteAllItems();	//清空listControl

	CLinkInfo linkInfo;					//定义CLinkInfo对象

	strcpy (linkInfo.m_strFilter, strFilter);	//设置过滤器

	hr = linkInfo.Open();				//打开记录集
	if (FAILED(hr))
	{
		::MessageBox(NULL, "打开数据库联系人表失败!", "数据库操作", MB_OK|MB_ICONEXCLAMATION);		
		return;
	}

	
	hr = linkInfo.MoveFirst();	
	if (FAILED(hr))	//判断表中是否有记录
		return;


	int i=0, j=0;
	CString strTmp;
	while (hr == S_OK)	//逐条读取记录集中所有记录
	{
		m_listLinkInfo.InsertItem(i, linkInfo.m_Name);
		m_listLinkInfo.SetItemText(i, ++j, linkInfo.m_Phone);
		m_listLinkInfo.SetItemText(i, ++j, linkInfo.m_Email);
		m_listLinkInfo.SetItemText(i, ++j, linkInfo.m_Address);
		m_listLinkInfo.SetItemText(i, ++j, linkInfo.m_Postcode);
		strTmp.Format("%d", linkInfo.m_PersonID);
		m_listLinkInfo.SetItemText(i, ++j, strTmp);		
		i++;
		j=0;
		hr = linkInfo.MoveNext();			//移动到下一条记录
	}


	linkInfo.Close();
	UpdateData(FALSE);

}

	// TODO: Add extra initialization here
	
	m_listLinkInfo.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);   
	int i=0;
	m_listLinkInfo.InsertColumn(i++, "姓名",	LVCFMT_LEFT, 90);
	m_listLinkInfo.InsertColumn(i++, "电话",	LVCFMT_LEFT, 90);
	m_listLinkInfo.InsertColumn(i++, "邮件",	LVCFMT_LEFT, 100);
	m_listLinkInfo.InsertColumn(i++, "地址",	LVCFMT_LEFT, 120);
	m_listLinkInfo.InsertColumn(i++, "邮编",	LVCFMT_LEFT, 90);
	m_listLinkInfo.InsertColumn(i++, "ID",	LVCFMT_LEFT, 0);

	m_cmbCondition.SetCurSel(0);

	ShowItem("");

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值