#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
}
#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
}