access数据库的使用,直接贴项目中使用代码

#import "C:\Program Files\Common Files\System\ado\msadox.dll"
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")




int CMainFrame::NewAccessFile(PlayList *plist)
{
if (NULL == plist)
return -1;


int ret = 0;
TCHAR szFolder[MAX_PATH];
CString szCon, szFile, szSharePath;
HRESULT hRet = S_FALSE;
_ConnectionPtr pCon = NULL;
_RecordsetPtr pRecret = NULL;
ADOX::_CatalogPtr pCata = NULL;
_variant_t RecordsAffected;


GetAppFolder(szFolder, sizeof szFolder);
CString strPath = _T("");
strPath.Format(_T("%s\\studioplay.ini"), szFolder);
TCHAR tBuf[MAX_PATH] = {0};
::GetPrivateProfileString(_T("StudioPlay"), _T("DistrubitionPath"), _T(""), tBuf, MAX_PATH, strPath);
szSharePath = tBuf;
if (szSharePath == _T(""))
{
szSharePath = szFolder;
}
szCon = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
szCon += szSharePath;
szFile += szSharePath;
szCon += ACCESS_NAME;
szFile += ACCESS_NAME;
szFile.Replace(_T("\\"), _T("\\\\"));
szCon.Replace(_T("\\"), _T("\\\\"));


hRet = pCon.CreateInstance(__uuidof(Connection));
if (S_OK != hRet)
{
ret = -2;
goto ERR;
}


hRet = pRecret.CreateInstance(__uuidof(Recordset));
if (S_OK != hRet)
{
ret = -2;
goto ERR;
}


hRet = pCata.CreateInstance(__uuidof(ADOX::Catalog));
if (S_OK != hRet)
{
ret = -2;
goto ERR;
}


if (!PathFileExists(szFile))
{
pCata->Create((_bstr_t)szCon);


hRet = pCon->Open((_bstr_t)szCon, "", "", adModeUnknown);
if (S_OK != hRet)
{
ret = -3;
goto ERR;
}


pCon->Execute("create table PlayList(ListID varchar(40), Name varchar(128));", &RecordsAffected, adCmdText);


pCon->Execute("create table PlayItem(ItemID varchar(40), NikeName varchar(128), HeadPic varchar(128), TextMsg varchar(128), Num int);", 
&RecordsAffected, adCmdText);
}
else
{
int mark = 0;
ADOX::_TablePtr pTab = NULL;
hRet = pCon->Open((_bstr_t)szCon, "", "", adModeUnknown);
if (S_OK != hRet)
{
ret = -3;
goto ERR;
}


pCata->PutActiveConnection((_bstr_t)szCon);
for (long i=0; i<pCata->Tables->Count; i++)
{
pTab = (ADOX::_TablePtr)pCata->Tables->GetItem(i);
CString tablename = (BSTR)pTab->GetName();
if (tablename == _T("PlayList"))
{
mark += 0x01;
}
else if (tablename == _T("PlayItem"))
{
mark += 0x02;
}
}


if (mark == 0x01)
{
pCon->Execute("create table PlayItem(ItemID varchar(40), NikeName varchar(128), HeadPic varchar(128), TextMsg varchar(128), Num int);", 
&RecordsAffected, adCmdText);
}
else if (mark == 0x02)
{
pCon->Execute("create table PlayList(ListID varchar(40), Name varchar(128));", &RecordsAffected, adCmdText);
}
else if (mark == 0)
{
pCon->Execute("create table PlayList(ListID varchar(40), Name varchar(128));", &RecordsAffected, adCmdText);


pCon->Execute("create table PlayItem(ItemID varchar(40), NikeName varchar(128), HeadPic varchar(128), TextMsg varchar(128), Num int);", 
&RecordsAffected, adCmdText);
}
}


ret = SelectAccess(pCon, pRecret, _T("PlayItem"), plist->strListID);
if (ret == 1)
{
CString sql;
sql = _T("delete from PlayItem where ItemID = ");
sql += _T("'");
sql += plist->strListID;
sql += _T("'");


pCon->Execute((_bstr_t)sql, &RecordsAffected, adCmdText);
}
else if (ret < 0)
{
ret = -4;
goto ERR;
}

{ // Update/Insert data
int num = 0;


vector<PlayStory>::const_iterator iter_story = plist->arrStory.begin();
for (; iter_story != plist->arrStory.end(); iter_story++)
{
vector<PlayAction>::const_iterator iter_act = iter_story->objProject.arrAction.begin();
for (; iter_act != iter_story->objProject.arrAction.end(); iter_act++)
{
int idx = 0;
PLAYITEM item;


vector<ActionParam>::const_iterator iter_param = iter_act->arrParam.begin();
for (;iter_param != iter_act->arrParam.end(); iter_param++)
{
idx++;
if (idx == 1)
{
item.Nikename = iter_param->strParam;
}
else if (idx == 2)
{
item.UserPic = iter_param->strParam;
}
else if (idx == 3)
{
idx = 0;
item.Text = iter_param->strParam;


if (item.Nikename == _T("") && item.UserPic == _T("") && item.Text == _T(""))
{
}
else
{
num++;
item.ID = plist->strListID;


CString sql, strNum;
strNum.Format(_T("%d"), num);
sql = _T("insert into PlayItem values('");
sql += item.ID;
sql += _T("','");
sql += item.Nikename;
sql += _T("','");
sql += item.UserPic;
sql += _T("','");
sql += item.Text;
sql += _T("', ");
sql += strNum;
sql += _T(");");


pCon->Execute((_bstr_t)sql, &RecordsAffected, adCmdText);
}


item.Reset();
}
}
}

ret = SelectAccess(pCon, pRecret, _T("PlayList"), plist->strListID);
if (ret == 0)
{
CString sql;
sql = _T("insert into PlayList values('");
sql += plist->strListID;
sql += _T("','");
sql += plist->strListName;
sql += _T("');");


pCon->Execute((_bstr_t)sql, &RecordsAffected, adCmdText);
}
else if (ret == 1)
{
CString sql;
sql = _T("update PlayList set Name = '");
sql += plist->strListName;
sql += _T("' where ListID = '");
sql += plist->strListID;
sql += _T("';");


pCon->Execute((_bstr_t)sql, &RecordsAffected, adCmdText);
}
}
}


ERR:
if (pCon->State)
{
pCon->Close();
pCon = NULL;
}


return ret;
}


int CMainFrame::SelectAccess(_ConnectionPtr pCnn, _RecordsetPtr pSet, CString strTable, CString strParam)
{
if (pCnn == NULL && pSet == NULL)
return -1;


CString strID;
if (strTable == _T("PlayList"))
strID = _T("ListID");
else if (strTable == _T("PlayItem"))
strID = _T("ItemID");


HRESULT hRet = S_FALSE;
CString sql;
sql = _T("select * from ") + strTable + _T(" where ") + strID + _T(" = ");
sql += _T("'");
sql += strParam;
sql += _T("';");


_CommandPtr pCom = NULL;  
hRet = pCom.CreateInstance(__uuidof(Command));
if (S_OK != hRet)
return -2;


pCom->ActiveConnection = pCnn;  
pCom->CommandText = _bstr_t((LPCTSTR)sql);  
pSet = pCom->Execute( NULL, NULL, adCmdText);   


while(!(pSet->adoEOF))
{
_variant_t var;
var = pSet->GetCollect((_variant_t)strID);
if (strParam == (LPCSTR)_bstr_t(var))
{
break;
}


pSet->MoveNext();
}


if (pSet->adoEOF)
return 0; //not find
else
return 1; //find
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值