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("");
MFC OLEDB数据库
最新推荐文章于 2021-04-13 19:21:54 发布