void CLryEDBQryDoc::OnDeleteRecord() 
{ 
	
	HRESULT hr; 
	try
	{ 
			if((theApp.UserInfo.bLogon()== TRUE)&&
			(ID_OK==MessageBox(NULL,_T("确认删除记录吗?"),_T("警告!"),MB_OKCANCEL+MB_ICONWARNING+MB_TASKMODAL)))
			{
				pObj.RowNO = Rs->AbsolutePosition-1;
 				hr = Rs->Delete(adAffectCurrent); 			
				TESTHR(hr); 				
				hr = Rs->Update();					
				TESTHR(hr);	
				
				hr = MoveNext();
				TESTHR(hr); 
				//hr = MovePrevious();
				//TESTHR(hr); 
				UpdateAllViews(NULL,2,&pObj);	
							
			}

	}
	catch(_com_error &e)
	{
		dump_com_error(e);
	}	
}
示例#2
0
//! 删除个人房屋内的物品信息
void    CRsDupRgn::DeleteDupRgnObj(const CGUID& guid)
{
	_RecordsetPtr rs;
	char sql[500] = "";
	try
	{
		TESTHR(CreateRs(rs));

		char szGUID[128];
		guid.tostring(szGUID);

		sprintf(sql, "DELETE FROM CSL_DUPRGN_GOODS WHERE DupRgnGUID='%s'", szGUID);
		// 先删除该个人房屋的成员
		TESTHR(OpenRs(sql, rs, GetGame()->GetDBEntityManager()->GetAccessThread()->GetConnPtr()));

		ReleaseRs(rs);
		return;
	}
	catch (_com_error &e)
	{
		ReleaseRs(rs);
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_DELRGNOBJFAIL), e);
		return;
	}

	return;
}
void CLryEDBQryView::SingleReport(CReportSele *pDlg)
{
	_variant_t str;
	int nItemIndex;
	CLryEDBQryDoc* pDoc = GetDocument();
	if(( nItemIndex=GetListCtrl().GetNextItem(-1,LVNI_SELECTED))!=-1)
	{
		pDoc->Rs->Move(nItemIndex,(long)adBookmarkFirst);
		str = pDoc->Rs->GetCollect(_bstr_t("试验编号")); 		 
		CString	strSQL;
		strSQL.Format(_T("select * from 热容量 where  试验编号='%s'"),VariantToStr(str)); 		
		try
		{ 
			
			HRESULT hr; 
			
			if(pDoc->RsPrintData->State==adStateOpen)
				pDoc->RsPrintData->Close();			
			hr = pDoc->RsPrintData->Open(strSQL.AllocSysString(),
				theApp.pConn.GetInterfacePtr(),
				adOpenStatic,
				adLockOptimistic,
				-1);
			TESTHR(hr); 
			
			if(pDoc->RsTitle->State==adStateOpen)
				pDoc->RsTitle->Close();
			strSQL = _T("select * from 系统参数");
			hr = GetDocument()->RsTitle->Open(strSQL.AllocSysString(),
				theApp.pConn.GetInterfacePtr(),
				adOpenStatic,
				adLockOptimistic,
				-1);
			TESTHR(hr); 
			
			pReportdlg.Init(0);
			pReportdlg.SetModifyPrepared(TRUE);	
			LPCTSTR dbName2 = _T("CopyHeat");
			pReportdlg.AddAdoDataSet(dbName2,((CLryEDBQryDoc*)GetDocument())->RsTitle);
			pReportdlg.SetModifyPrepared(TRUE);
			LPCTSTR dbName1  = _T("SReportHeat");
			pReportdlg.AddAdoDataSet(dbName1,((CLryEDBQryDoc*)GetDocument())->RsPrintData);
			//nItemIndex = pDoc->RsPrintData->GetRecordCount();	
			//pDoc->RsPrintData->MoveFirst();
			CString File(pDlg->cPath);
			File+=_T("reports\\")+pDlg->cFile;
			LPCTSTR path = File.GetBuffer(File.GetLength());
			pReportdlg.SetReportFile(path);
			File.ReleaseBuffer();
			if(pDlg->m_iSelect==0)
				pReportdlg.ShowReport();       //设计报表 
			else
				pReportdlg.DesignReport();		// 预览报表 
		}
		catch(_com_error &e)
		{ 
			dump_com_error(e);
		} 
	}	
}
示例#4
0
void read(std::string excelFile, int sheetIndex, bool header, std::string csvFile)
{
    clock_t t1 = clock();

    std::cout << "reading " << excelFile;

    if(FAILED(::CoInitialize(NULL))) return;

    _RecordsetPtr pSchema = NULL;
    _RecordsetPtr pRec = NULL;

    int cellCount = 0;

    try
    {
        _bstr_t connStr(makeConnStr(excelFile, header).c_str());

        TESTHR(pRec.CreateInstance(__uuidof(Recordset)));
        TESTHR(pRec->Open(sqlSelectSheet(connStr, sheetIndex).c_str(), connStr, adOpenStatic, adLockOptimistic, adCmdText));

        std::ofstream stream(csvFile.c_str());

        while(!pRec->adoEOF)
        {
            for(long i = 0; i < pRec->Fields->GetCount(); ++i)
            {
                if(i > 0) stream << ";";
                _variant_t v = pRec->Fields->GetItem(i)->Value;
                if(v.vt == VT_R8)
                    stream << v.dblVal;
                if(v.vt == VT_BSTR)
                    stream << (char*)(_bstr_t)v.bstrVal;
                ++cellCount;
            }
            stream << std::endl;
            pRec->MoveNext();
        }
    }
    catch(_com_error &e)
    {
        _bstr_t bstrDescription(e.Description());
        CharToOem(bstrDescription, bstrDescription);
        std::cout << bstrDescription << std::endl;
    }

    ::CoUninitialize();

    clock_t t2 = clock();
    double t = (double)(t2 - t1) / CLOCKS_PER_SEC;
    std::cout << ": " << t << " sec; " << cellCount / t << " cells/sec" << "; see " << csvFile << std::endl;
}
///////////////////////////////////////////////////////
// RADEventsXML::Persist
//
// Replace the XML document on this object with a new one,
// using the RADEventsList parameter. Then save the XML
// document out to it's persistent representation (a file).
// Note: the current XML document is replaced, not updated,
// by this operation.
//
// Input/Output:
//	rel	- the RADEventsList instance that is converted to an
//		XML document and serialized.
//
///////////////////////////////////////////////////////
void RADEventsXML::Persist(RADEventsList& rel)
{
	HRESULT hr = 0;

	DomFromCOM();
	if (!m_pXMLDom) throw NULL;

	try
	{
		if (rel.bChanged)
			ConstructXMLDoc(rel);

		if (m_pXMLDom)
		{
			_variant_t vSrc = m_fullpath;
			hr = m_pXMLDom->save(vSrc);
			TESTHR(hr);
			rel.bChanged = false;
		}
	}
	catch(...)
	{
		dprintf( "%s:%d  HRCALL Failed: %s\n  0x%.8x = %s\n",
			__FILE__, __LINE__, "Persist Exception" , hr);
	}
}
示例#6
0
bool CRsMail::DeletePlayerMailsGoods(set<CGUID>& mailSet, _ConnectionPtr& cn)
{
	char* sql = new char[256*mailSet.size()];
	sprintf(sql, "DELETE FROM CSL_MAIL_GOODS WHERE guid='");
	try
	{
		set<CGUID>::iterator itr = mailSet.begin();
		for(; itr != mailSet.end(); itr++)
		{
			char szGUID[128];
			(*itr).tostring(szGUID);
			strcat(sql, szGUID);
			strcat(sql, "' OR '");
		}

		long sqlLen = strlen(sql);
		sql[sqlLen-4] = '\0';
		// 先删除该个人房屋的成员
		TESTHR(ExecuteCn(sql, cn));
		SAFE_DELETE_ARRAY(sql);
		return true;
	}
	catch (_com_error &e)
	{
		SAFE_DELETE_ARRAY(sql);
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_DELRGNOBJFAIL), e);
		return false;
	}

	return false;
}
CFileManage::CFileManage(void)
{
#if FILE_XML_SUPPORT
	m_lngRecordCount = 0;
	///////////////XML初始化/////////////////
	IXMLDOMElementPtr  pSetting;
	VARIANT varValue;
	CString strTemp;
	HRESULT hr;
	VariantInit(&varValue);

	try
	{
		TESTHR(CoInitialize(NULL)); 
		hr = m_docPtr.CreateInstance("Msxml2.DOMDocument.4.0");
		if (FAILED(hr))
		{
			CFileManage::WriteTraceLog(TRACE_LOG_FILENAME,"创建XML DOMDocument 对象失败!", 0);
		}
		_variant_t varXml(POS_TERM_DATA);
		_variant_t varOut((bool)TRUE);
		varOut = m_docPtr->load(varXml);

	}
	catch (...)
	{
		CFileManage::WriteTraceLog(TRACE_LOG_FILENAME,"加载POSXML文件异常", 0);
	}
#endif

}
// The original Events list was created to exchange data from RAD with
// other tools, such as INCC.  A columnar text file was defined, where the
// first row in the file representing the columns and titles.
// The RADEventsXML class maintains an array of strings, indexed by the
// type RADEventField, declaring the same column titles. These titles
// are represented in the XML document processed by the class.
//
// Returns:
//	IXMLDOMElement: the constructed Columns node,
//	or a NULL pointer if processing failed.
//
///////////////////////////////////////////////////////
IXMLDOMElement* RADEventsXML::ConstructColumnsNode()
{
	IXMLDOMElement *pColumns = NULL;
	IXMLDOMElement *pTitle = NULL;
	IXMLDOMNode *pIXMLDOMNode = NULL;

	_bstr_t bstr1;
	_bstr_t bstr2;
	HRESULT hr = 0;

	try
	{
		// create <Columns>
		bstr1 = "Columns";
		hr = m_pXMLDom->createElement(bstr1,&pColumns);
		TESTHR(hr);
		AddWhiteSpaceToNode(bstr_wsnt, pColumns);

		// for each title element
		//	create <Title>value</Title>
		bstr2 = "Title";
		for (int i = 0; i < eRADAttMax; i++)
		{
			pTitle = NULL;
			//	create <Title>value</Title> 
			hr = m_pXMLDom->createElement(bstr2,&pTitle);
			TESTHR(hr);

			bstr1 = RADEventsList::Titles[i];
			hr = pTitle->put_text(bstr1); 
			TESTHR(hr);

			//  append it as a child to <Columns>
			hr = pColumns->appendChild(pTitle, &pIXMLDOMNode); 
			TESTHR(hr);
			AddWhiteSpaceToNode(bstr_wsnt, pColumns);
		}
	}
	catch(...)
	{
		dprintf( "%s:%d  HRCALL Failed: %s\n  0x%.8x = %s\n",
			__FILE__, __LINE__, "ConstructColumnsNode Exception" , hr);
	}
	return pColumns;
}
示例#9
0
std::string sqlSelectSheet(_bstr_t connStr, int sheetIndex)
{
    _ConnectionPtr pCon = NULL;
    _RecordsetPtr pSchema = NULL;

    TESTHR(pCon.CreateInstance(__uuidof(Connection)));
    TESTHR(pCon->Open(connStr, "", "", NULL));

    pSchema = pCon->OpenSchema(adSchemaTables);

    for(int i = 0; i < sheetIndex; ++i) pSchema->MoveNext();

    std::string sheetName = (char*)(_bstr_t)pSchema->Fields->GetItem("TABLE_NAME")->Value.bstrVal;

    std::stringstream stream;
    stream << "SELECT * FROM [" << sheetName << "]";
    return stream.str();
}
示例#10
0
DB_OPERATION_RESULT_TYPE CRsMail::DeletePlayerMails(const CGUID& playerID, _ConnectionPtr& cn)
{
	_RecordsetPtr rs;
	char sql[1024] = "";
	try
	{
		set<CGUID> guidSet;
		char szGUID[128];
		playerID.tostring(szGUID);

		sprintf(sql, "SELECT * FROM CSL_MAIL WHERE PlayerID='%s'", szGUID);
		TESTHR(CreateRs(rs));
		TESTHR(OpenRs(sql, rs, cn, adOpenForwardOnly, adLockOptimistic));
		rs->MoveFirst();
		while(!rs->GetadoEOF())
		{
			CGUID tGUID((_bstr_t)rs->GetCollect("guid"));
			guidSet.insert(tGUID);
			rs->MoveNext();
		}
		ReleaseRs(rs);
		// 删除房间内物品
		DeletePlayerMailsGoods(guidSet, cn);

		sprintf(sql, "DELETE FROM CSL_MAIL WHERE PlayerID='%s'", szGUID);
		// 先删除该个人房屋的成员
		if(!ExecuteCn(sql, cn))
		{
			PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_DELDUPRGNPROPERTYERR));
			return DB_OPER_RESULT_ERROR;
		}

		return DB_OPER_RESULT_OK;
	}
	catch (_com_error &e)
	{
		ReleaseRs(rs);
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_DELRGNOBJFAIL), e);
		return DB_OPER_RESULT_ERROR;
	}

	return DB_OPER_RESULT_ERROR;
}
示例#11
0
// GS查询指定玩家的个人房屋副本GUID
void	CRsDupRgn::QuestPHGuidByPlayerID(const char* playerName, CGUID& retPHGUID)
{
	_RecordsetPtr rs, rs1;
	char sql[500] = "";
	try
	{
		TESTHR(CreateRs(rs));
		TESTHR(CreateRs(rs1));

		// 先查找Player GUID
		sprintf(sql, "SELECT * FROM baseproperty WHERE Name='%s'", playerName);
		TESTHR(OpenRs(sql, rs, GetGame()->GetDBEntityManager()->GetAccessThread()->GetConnPtr()));

		char* szGUID = NULL;
		if(!rs->GetadoEOF())
		{
			szGUID = (_bstr_t)rs->GetCollect("guid");
		}
		ReleaseRs(rs);
		sprintf(sql, "SELECT * FROM CSL_DUPRGN_PROPERTY WHERE OwnerGUID='%s'", szGUID);
		TESTHR(OpenRs(sql, rs, GetGame()->GetDBEntityManager()->GetAccessThread()->GetConnPtr()));

		while(!rs->GetadoEOF())
		{
			// GUID
			retPHGUID = CGUID((_bstr_t)rs->GetCollect("guid"));
		}
		ReleaseRs(rs1);
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_QUESTRGNGUIDOK));
		return;
	}
	catch (_com_error &e)
	{
		ReleaseRs(rs);
		ReleaseRs(rs1);
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_QUESTRGNGUIDFAIL), e);
		return;
	}

	return;
}
示例#12
0
//! 读取玩家的所有邮件信息
bool CRsMail::LoadPlayerMails(const CGUID& playerID, CDBMailGroup* mailGroup, _ConnectionPtr& cn)
{
	if(!mailGroup) return true;

	mailGroup->Clear();

	mailGroup->SetOwnerGUID(playerID);

	_RecordsetPtr rs;
	char sql[500] = "";
	try
	{
		TESTHR(CreateRs(rs));

		char szGUID[128];
		playerID.tostring(szGUID);

		sprintf(sql, "select * FROM CSL_MAIL WHERE PlayerID='%s'", szGUID);
		// 先删除该个人房屋的成员
		TESTHR(OpenRs(sql, rs, cn));

		while(!rs->GetadoEOF())
		{
			CGUID tGuid((_bstr_t)rs->GetCollect("guid"));
			CDBMail* mail = new CDBMail(tGuid);
			LoadMail(mail, rs, cn);
			mailGroup->GetMailGroupSet().insert(mail);
			rs->MoveNext();
		}
		ReleaseRs(rs);
		return true;
	}
	catch (_com_error &e)
	{
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_DELRGNOBJFAIL), e);
		ReleaseRs(rs);
		return false;
	}
	ReleaseRs(rs);
	return false;
}
示例#13
0
void
TplRecordset::add(const std::string& xid)
{
    const std::string command =
        "INSERT INTO " + tableName + " ( xid ) VALUES ( ? )";
    _CommandPtr cmd = NULL;
    _ParameterPtr xidVal = NULL;

    TESTHR(cmd.CreateInstance(__uuidof(Command)));
    TESTHR(xidVal.CreateInstance(__uuidof(Parameter)));
    _ConnectionPtr p = *dbConn;
    cmd->ActiveConnection = p;
    cmd->CommandText = command.c_str();
    cmd->CommandType = adCmdText;
    xidVal->Name = "@xid";
    xidVal->Type = adVarBinary;
    xidVal->Size = xid.length();
    xidVal->Direction = adParamInput;
    xidVal->Value = BlobEncoder(xid);
    cmd->Parameters->Append(xidVal);
    cmd->Execute(NULL, NULL, adCmdText | adExecuteNoRecords);
}
示例#14
0
//测试表是否存在
int CCommDBOper::ADOTestTable(_ConnectionPtr &pCon,const CString strTableName,int iWarn)
{	
	_RecordsetPtr pRs;
	TESTHR(pRs.CreateInstance(__uuidof(Recordset)) );
	CString strSql;
	CString strDcr;
	int iret1;
	
	strDcr.Format("打开表");
	strSql.Format("SELECT * FROM %s",strTableName);
	
 	iret1 = ADORecordsetOpen(pCon,pRs,strSql,strDcr,iWarn);
	ADOCloseRecordset(pRs,iWarn);
	return iret1;
}
示例#15
0
void
TplRecordset::remove(const std::string& xid)
{
    // Look up the item by its xid
    const std::string command =
        "DELETE FROM " + tableName + " WHERE xid = ?";
    _CommandPtr cmd = NULL;
    _ParameterPtr xidVal = NULL;

    TESTHR(cmd.CreateInstance(__uuidof(Command)));
    TESTHR(xidVal.CreateInstance(__uuidof(Parameter)));
    _ConnectionPtr p = *dbConn;
    cmd->ActiveConnection = p;
    cmd->CommandText = command.c_str();
    cmd->CommandType = adCmdText;
    xidVal->Name = "@xid";
    xidVal->Type = adVarBinary;
    xidVal->Size = xid.length();
    xidVal->Direction = adParamInput;
    xidVal->Value = BlobEncoder(xid);
    cmd->Parameters->Append(xidVal);
    _variant_t deletedRecords;
    cmd->Execute(&deletedRecords, NULL, adCmdText | adExecuteNoRecords);
}
HRESULT CLryEDBQryDoc::Move(ADO_LONGPTR NumRecords, const _variant_t &Start)
{
	HRESULT  Result;
	try
	{
		Result = Rs->Move(NumRecords,Start); 
		TESTHR(Result);
		UpdateAllViews(NULL,1,NULL);
	}
	catch(_com_error &e)
	{
		dump_com_error(e);
	}
	return Result;
}
void CLryEDBQryDoc::SQL()
{
	HRESULT hr= S_OK;
	CString strParam1,strParam2;

	CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
	CString strDev = _T("1#量热仪");
	int index = pFrame->m_wndComboBoxDevice->GetCurSel();
	pFrame->m_wndComboBoxDevice->GetLBText( index, strDev);

	CString strBombNO = _T("A氧弹");
	index = pFrame->m_wndComboBoxBombNO->GetCurSel();
	pFrame->m_wndComboBoxBombNO->GetLBText( index, strBombNO );

	pFrame->m_wndDateTimeBoxStart.GetTime(StartTime);
	pFrame->m_wndDateTimeBoxEnd.GetTime(EndTime); 
	EndTime =MakeDays(1)+EndTime;
	CString strStartTime,strEndTime;
	strStartTime.Format(_T("#%d-%d-%d#"),StartTime.GetYear(),StartTime.GetMonth(),StartTime.GetDay());
	strEndTime.Format(_T("#%d-%d-%d#"),EndTime.GetYear(),EndTime.GetMonth(),EndTime.GetDay());
	if(strBombNO!=_T("全部"))
		strParam1.Format(_T("and 氧弹编号='%s'"),strBombNO);
	else
		strParam1 = _T("");
	if(strDev!=_T("全部"))
		strParam2.Format(_T("and 设备名称='%s'"),strDev);
	else
		strParam2 = _T("");
	strSQL.Format(_T("select * from 热容量 where 试验日期>=%s and 试验日期<=%s  %s  %s"),strStartTime,strEndTime,strParam1,strParam2);
	
	try
	{
		if(Rs->State==adStateOpen)
			Rs->Close();
		//IADORecordBindingPtr pIRB(pRsIED);
		hr = Rs->Open(strSQL.AllocSysString(),
					theApp.pConn.GetInterfacePtr(),
					adOpenStatic,
					adLockOptimistic,
					-1);	
		TESTHR(hr);
		//TESTHR(pIRB->BindToRecordset(&rsQryBind));
	}
	catch(_com_error &e)
	{
		e.ErrorMessage();
	} 
}
示例#18
0
//! 删除个人房屋内的物品信息
void    CRsMail::DeleteMailGoods(const CGUID& guid)
{
	char sql[500] = "";
	try
	{
		char szGUID[128];
		guid.tostring(szGUID);
		sprintf(sql, "DELETE FROM CSL_MAIL_GOODS WHERE MailID='%s'", szGUID);
		// 先删除该个人房屋的成员
		TESTHR(ExecuteCn(sql, GetGame()->GetDBEntityManager()->GetAccessThread()->GetConnPtr()));
		return;
	}
	catch (_com_error &e)
	{
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_DELRGNOBJFAIL), e);
		return;
	}

	return;
}
示例#19
0
DB_OPERATION_RESULT_TYPE CRsGenVar::Del(CDBGenVarGroup* pGenVarGroup, _ConnectionPtr& cn)
{
	char sql[500] = "";
	try
	{
		set<CDBGenVar*>::iterator itr = pGenVarGroup->GetGenVarGroupSet().begin();
		for(; itr != pGenVarGroup->GetGenVarGroupSet().end(); itr++)
		{
			sprintf(sql, "DELETE FROM CSL_SCRIPTVAR WHERE varName='%s'", (*itr)->GetStringAttr(string("varName"), 0));
			TESTHR(ExecuteCn(sql, cn));
		}
		return DB_OPER_RESULT_OK;
	}
	catch (_com_error &e)
	{
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_DELRGNOBJFAIL), e);
		return DB_OPER_RESULT_ERROR;
	}

	return DB_OPER_RESULT_ERROR;
}
void CCalCoffDlg::OnBnClickedSaveCoff()
{ 
	_RecordsetPtr Rs;
	HRESULT hr;
	CString strSQL ;
	CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
	CString strDev = _T("1#量热仪");
	int index = pFrame->m_wndComboBoxDevice->GetCurSel();
	pFrame->m_wndComboBoxDevice->GetLBText( index, strDev);
	////////////////////////////////////////////
	Rs.CreateInstance("ADODB.Recordset");
	
	strSQL.Format(_T("SELECT 截距A, 斜率B FROM 测硫仪 WHERE (名称 = '%s')"),strDev);
		

	try
	{
		if(Rs->State==adStateOpen)
			Rs->Close();
		//IADORecordBindingPtr pIRB(pRsIED);
		hr = Rs->Open(strSQL.AllocSysString(),
			theApp.pConn.GetInterfacePtr(),
			adOpenStatic,
			adLockOptimistic,
			-1);	
		TESTHR(hr);
		//TESTHR(pIRB->BindToRecordset(&rsQryBind));
		Rs->PutCollect("截距A",m_intercept);//,
		Rs->PutCollect("斜率B",m_slope);
		Rs->Update();
	}
	catch(_com_error &e)
	{
		e.ErrorMessage();
		MessageBox(_T("请将查询设备修改为\n你要修改系数的仪器"),_T("警告"),MB_ICONWARNING+MB_OK);

		//dump_com_error(e);
	} 
}
示例#21
0
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
	switch(dwReason)
	{
	case DLL_PROCESS_ATTACH:
		TESTHR( CoInitialize(NULL) ); 
		g_hInst = hInstance;
		CSettings::GetGlobalSettings();
		g_pConfigXML = new CConfigXML();
		g_pViewList = new CViewList();
		g_pPidlMgr = new CPidlManager();
		g_pDialogList = new CDialogList();
		break;

	case DLL_PROCESS_DETACH:
		_RPTF0(_CRT_WARN, "DLL_PROCESS_DETACH\n");
		CSettings::SaveGlobalSettings();
		if(g_pViewList)
			delete g_pViewList;
		if(g_pConfigXML)
		{
			try{
				delete g_pConfigXML;
			}catch(...){
				_RPTF0(_CRT_WARN, "Error deleting configxml\n");
			}
		}
		if(g_pPidlMgr)
			delete g_pPidlMgr;
		if(g_pDialogList)
			delete g_pDialogList;
		CoUninitialize();
		//_RPTF0(_CRT_WARN, "Unloaded\n");
		break;
	}

	return TRUE;
}
示例#22
0
//! 保存个人房屋内的物品信息
bool    CRsDupRgn::SaveDupRgnObj(const CGUID& ownerID, map<CGUID,CDBRgnGoods*>& goodsGroup, _ConnectionPtr& cn)
{

	if(cn == NULL)
	{
		AddLogText(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_CNPTRNULL));
		return false;
	}

	_RecordsetPtr rs;
	// 比物品个数多分配2048字节
	char *sql = new char[1024 * (goodsGroup.size()+2)];
	
	string iniName   = "phrgnobj";
	string tableName = "CSL_DUPRGN_GOODS";
	try
	{
		TESTHR(CreateRs(rs));

		char szGUID[128];
		ownerID.tostring(szGUID);

		sprintf(sql, "DELETE FROM CSL_DUPRGN_GOODS WHERE DupRgnGUID='%s'", szGUID);
		// 先删除该个人房屋的成员
		if(!ExecuteCn(sql, cn))
		{
			PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_DELRGNOBJFAIL));
			return false;
		}

		// 清空sql语句
		memset(sql, 0, 1024 * (goodsGroup.size()+2));

		// 生成语句头
		strcpy(sql, "INSERT INTO CSL_DUPRGN_GOODS(");

		CDataEntityManager* pObjAttrDef = NULL;
		std::map<string, CDataEntityManager*>::iterator itr = GetGame()->GetDBEntityManager()->GetObjAttrDef().find(iniName);
		if(itr != GetGame()->GetDBEntityManager()->GetObjAttrDef().end())
			pObjAttrDef = itr->second;

		if(!pObjAttrDef) return false;

		//! 生成语句身
		CDataEntityManager::EntityPropertyMapItr attrItr = pObjAttrDef->GetEntityPropertyMap().begin();
		for (; attrItr != pObjAttrDef->GetEntityPropertyMap().end(); attrItr++)
		{
			if(attrItr->second->GetDBTableName() == tableName)
			{
				CWrapDataObject* wdo = attrItr->second->GetDataObject(0);
				if(wdo)
				{
					// 添加属性字段名
					strcat(sql, attrItr->second->GetEPName().c_str());
					strcat(sql, ",");
				}
			}
		}

		long sqlLen = strlen(sql);
		sql[sqlLen-1] = '\0';
		strcat(sql, ") select ");

		map<CGUID,CDBRgnGoods*>::iterator goodsItr = goodsGroup.begin();
		for(; goodsItr != goodsGroup.end(); goodsItr++)
		{	
			//! 生成语句身
			attrItr = pObjAttrDef->GetEntityPropertyMap().begin();
			for (; attrItr != pObjAttrDef->GetEntityPropertyMap().end(); attrItr++)
			{
				if(attrItr->second)
				{
					if(attrItr->second->GetDBTableName() == tableName)
					{
						// 添加属性字段值
						CEntityProperty* ep = (goodsItr->second)->GetDataEntityManager().GetEntityProperty(attrItr->second->GetEPName());
						if(ep)
						{
							if(ep->GetDBTableName() == tableName)
							{
								switch(ep->GetDataType())
								{
								case DATA_OBJECT_TIME:
									{
										char szTimeValue[2048];
										DWORD timeValue[6] = {0};
										ep->GetBufAttr(0, (void*)&timeValue[0], sizeof(DWORD)*6);
										sprintf(szTimeValue, "%d-%d-%d %d:%d:%d", timeValue[0], timeValue[1], timeValue[2],
											timeValue[3], timeValue[4], timeValue[5]);
										//rs->PutCollect((*epItr).c_str(), szTimeValue);
										strcat(sql, "'");
										strcat(sql, szTimeValue);
										strcat(sql, "',");
									}
									break;
								case  DATA_OBJECT_STRING:
									{
										//rs->PutCollect((*epItr).c_str(), );
										strcat(sql, "'");
										const char* pStr = ep->GetStringAttr(0);
										if(pStr)
											strcat(sql, pStr);
										else
											strcat(sql, "");
										strcat(sql, "',");
									}
									break;
								case DATA_OBJECT_BUFFER:
									{
										//SaveBufferField((*goodsItr), (*epItr).c_str(), rs);
									}
									break;
								case DATA_OBJECT_GUID:
									{
										CGUID tGUID;
										ep->GetGuidAttr(0, tGUID);
										char szGuid[128];
										tGUID.tostring(szGuid);
										//rs->PutCollect((*epItr).c_str(), szGuid);
										strcat(sql, "'");
										strcat(sql, szGuid);
										strcat(sql, "',");
									}
									break;
								case DATA_OBJECT_BOOL:
								case DATA_OBJECT_CHAR:
								case DATA_OBJECT_BYTE:
									{
										//rs->PutCollect((*epItr).c_str(), (BYTE)ep->GetLongAttr(0));
										char value[32];
										memset(value, 0, sizeof(value));
										itoa((BYTE)ep->GetLongAttr(0), value, 10);
										strcat(sql, value);
										strcat(sql, ",");
									}
									break;
								case DATA_OBJECT_SHORT:
								case DATA_OBJECT_WORD:
								case DATA_OBJECT_USHORT:
									{
										//rs->PutCollect((*epItr).c_str(), (WORD)ep->GetLongAttr(0));
										char value[32];
										memset(value, 0, sizeof(value));
										itoa((WORD)ep->GetLongAttr(0), value, 10);
										strcat(sql, value);
										strcat(sql, ",");
									}
									break;
								case DATA_OBJECT_FLOAT:
								case DATA_OBJECT_LONG:
								case DATA_OBJECT_ULONG:
								case DATA_OBJECT_DWORD:
									{
										//rs->PutCollect((*epItr).c_str(), (DWORD)ep->GetLongAttr(0));
										char value[32];
										memset(value, 0, sizeof(value));
										itoa((DWORD)ep->GetLongAttr(0), value, 10);
										strcat(sql, value);
										strcat(sql, ",");
									}
									break;
								}
							}
						}
					}
				}
			}

			sqlLen = strlen(sql);
			sql[sqlLen-1] = '\0';

			strcat(sql, " union all select ");
		}
		sqlLen = strlen(sql);
		sql[sqlLen-17] = '\0';

		TESTHR(ExecuteCn(sql, cn));
		SAFE_DELETE_ARRAY(sql);
		return true;
	}
	catch (_com_error &e)
	{
		SAFE_DELETE_ARRAY(sql);
		ReleaseRs(rs);
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_SAVERGNGOODSFAIL), e);
		return false;
	}
	SAFE_DELETE_ARRAY(sql);
	return false;
}
示例#23
0
DB_OPERATION_RESULT_TYPE CRsGenVar::Load(CDBGenVarGroup* pGenVarGroup, _ConnectionPtr& cn)
{
	bool IsLocalConnection = false;
	if(!pGenVarGroup || NULL == cn)
	{
		PrintErr(CStringReading::LoadString(IDS_DBS_RSPLAYER,STR_DBS_PLAYER_CNPTRNULL));
		return DB_OPER_RESULT_ERROR;
	}
	char sql[1024];

	pGenVarGroup->Clear();

	_RecordsetPtr rs;
	try
	{
		// 在获取数据库中的
		TESTHR(CreateRs(rs));
		sprintf(sql, "SELECT * FROM CSL_SCRIPTVAR");
		TESTHR(OpenRs(sql, rs, cn, adOpenForwardOnly, adLockReadOnly));

		CDBGenVar *pGenVar = NULL;	
		while( !rs->GetadoEOF() )
		{
			CGUID tGuid;
			CGUID::CreateGUID(tGuid);
			pGenVar = new CDBGenVar(tGuid);
			CDataEntityManager::EntityPropertyMapItr epItr = pGenVar->GetDataEntityManager().GetEntityPropertyMap().begin();
			for(; epItr != pGenVar->GetDataEntityManager().GetEntityPropertyMap().end(); epItr++)
			{
				if(epItr->second->GetDBTableName() == "CSL_SCRIPTVAR")
				{
					switch(epItr->second->GetDataType())
					{
					case DATA_OBJECT_TIME:
						{
							_variant_t var = rs->GetCollect(epItr->first.c_str());
							long timeBuf[6] = {0};
							if( var.vt != VT_NULL ) 
							{
								SYSTEMTIME st;
								VariantTimeToSystemTime(var.date, &st);

								timeBuf[0] = st.wYear;
								timeBuf[1] = st.wMonth;
								timeBuf[2] = st.wDay;
								timeBuf[3] = st.wHour;
								timeBuf[4] = st.wMinute;
								timeBuf[5] = st.wSecond;
								epItr->second->SetBufAttr(0, (void*)&timeBuf[0], sizeof(DWORD)*6);
							}
						}
						break;
					case  DATA_OBJECT_STRING:
						{
							string strValue = (_bstr_t)rs->GetCollect(epItr->first.c_str());
							epItr->second->SetStringAttr(0, strValue.c_str());
						}
						break;
					case DATA_OBJECT_BUFFER:
						{
							//LoadBufferField(pPlayer, epItr->first.c_str(), rs);
						}
						break;
					case DATA_OBJECT_GUID:
						{
							CGUID tGUID(_bstr_t(rs->GetCollect(epItr->first.c_str())));
							epItr->second->SetGuidAttr(0, tGUID);
						}
						break;
					case DATA_OBJECT_FLOAT:
					case DATA_OBJECT_LONG:
					case DATA_OBJECT_SHORT:
					case DATA_OBJECT_ULONG:
					case DATA_OBJECT_USHORT:
					case DATA_OBJECT_BOOL:
					case DATA_OBJECT_CHAR:
					case DATA_OBJECT_BYTE:
					case DATA_OBJECT_WORD:
					case DATA_OBJECT_DWORD:
						{
							long value = rs->GetCollect(epItr->first.c_str());
							epItr->second->SetLongAttr(0, value);
						}
						break;
					}
				}
			}

			pGenVarGroup->GetGenVarGroupSet().insert(pGenVar);
			rs->MoveNext();
		}

		ReleaseRs(rs);

		return DB_OPER_RESULT_OK;
	}// end try
	catch(_com_error &e)
	{
		PrintErr(CStringReading::LoadString(IDS_DBS_RSPLAYER,STR_DBS_PLAYER_OPENBASEERR), e);
		ReleaseRs(rs);
		return DB_OPER_RESULT_ERROR;
	}
	return DB_OPER_RESULT_ERROR;
}
void CClyEditListCtrl::FillHeaderCtrl(CClyHostDoc *pDoc)
{
	
	int i =0;
	int iStrLen = 0;
	HRESULT hr= S_OK;
	_variant_t  str;
	CStringArray ColNameArray;
	BeginWaitCursor() ;
	try
	{ 
		_RecordsetPtr Rs ;
		CString strSQL;
		Rs.CreateInstance("ADODB.Recordset");
		strSQL = _T("select * from 测硫仪实验数据");
		if(Rs->State==adStateOpen)
			Rs->Close();
		//IADORecordBindingPtr pIRB(pRsIED);
		hr = Rs->Open(strSQL.AllocSysString(),
			theApp.pConn.GetInterfacePtr(),
			adOpenStatic,
			adLockOptimistic,
			-1);	
		TESTHR(hr);
		//得到所有字段名称
		GetAllFieldName(Rs,&ColNameArray);
  
		SetRedraw(FALSE);
		//清除所有数据

		DeleteAllItems();
		//清除所有标题
		do
		{
			DeleteColumn(0);
		}
		while(GetHeaderCtrl()->GetItemCount()>0); 
		//写字段标题
		for(i=ColNameArray.GetSize()-1;i>=0;i--)
		{
			CDC *pDC = GetDC();
			iStrLen	= pDC->GetTextExtent(ColNameArray.GetAt(i)).cx*1.5;				
			InsertColumn(0,ColNameArray.GetAt(i),LVCFMT_CENTER,iStrLen ,-1);
			ReleaseDC(pDC);	
		}  
		///////////////////////////////////
		/*
		LONG RecordCount = 0;
		RecordCount = Rs->GetRecordCount();
		SetItemCount(RecordCount);

		if(RecordCount>0)
		{
			if(!Rs->adoEOF)
				Rs->MoveLast();

			while(!Rs->BOF)
			{		
				for(i=0;i<Rs->Fields->Count;i++)
				{
					str = Rs->GetCollect((_bstr_t)ColNameArray.GetAt(i));
					if(i==0)
						InsertItem(0,VariantToStr(str));
					else
						SetItemText(0,i,VariantToStr(str));
				}
				Rs->MovePrevious();
			}  
			Rs->MoveFirst();
		}
		*/
		//////////////////////////////////////
		SetRedraw(TRUE);  
	}
	catch(_com_error &e)
	{
		dump_com_error(e);
	}
	EndWaitCursor();
	
}
示例#25
0
void CRsSetup::LoadPlayerID()
{
	char sql[512];
	_ConnectionPtr cn;
	_RecordsetPtr rs;

	CDBEntityManager::DBSetupMapItr itr = GetGame()->GetDBEntityManager()->GetDBSetupMap().begin();
	if(itr != GetGame()->GetDBEntityManager()->GetDBSetupMap().end())
	{
		try
		{
		//	TESTHR(CreateCn(cn));
			TESTHR(CreateRs(rs));

	//		TESTHR(OpenCn(cn));
			sprintf(sql, "SELECT TOP 1 playerID FROM csl_setup");
			TESTHR(OpenRs(sql, rs, GetGame()->GetDBEntityManager()->GetAccessThread()->GetConnPtr()/*m_Connection*/));


			if(rs->GetadoEOF())
			{
				itr->second->SetPlayerID(NULL_GUID);
			}
			else
			{
				itr->second->SetPlayerID( CGUID(((char*)(_bstr_t)rs->GetCollect("playerID"))) );
			}
			ReleaseRs(rs);
			//ReleaseCn(cn);
		}
		catch(_com_error &e)
		{
			ReleaseRs(rs);
			//ReleaseCn(cn);
			PrintErr("load playerid error", e);
			itr->second->SetPlayerID(NULL_GUID);
		}
	}
	else
	{
		CGUID guid;
		CGUID::CreateGUID(guid);
		CDBSetup* s = new CDBSetup(guid);
		GetGame()->GetDBEntityManager()->AddOneDBSetup(s);

		try
		{
		//	TESTHR(CreateCn(cn));
			TESTHR(CreateRs(rs));

		//	TESTHR(OpenCn(cn));
			sprintf(sql, "SELECT TOP 1 playerID FROM csl_setup");
			TESTHR(OpenRs(sql, rs, GetGame()->GetDBEntityManager()->GetAccessThread()->GetConnPtr()/*m_Connection*/));


			if(rs->GetadoEOF())
			{
				s->SetPlayerID(NULL_GUID);
			}
			else
			{
				s->SetPlayerID( CGUID(((char*)(_bstr_t)rs->GetCollect("playerID"))) );
			}
			ReleaseRs(rs);
			//ReleaseCn(cn);
		}
		catch(_com_error &e)
		{
			ReleaseRs(rs);
			//ReleaseCn(cn);
			PrintErr("load playerid error", e);
			s->SetPlayerID(NULL_GUID);
		}
	}
}
void CLryEDBQryView::AverageReport(CReportSele *pDlg)
{
	_variant_t strNO,strDev,strBombName;
	COleDateTime dt;
	CString strTime1,strTime2;
	int nItemIndex;
	CLryEDBQryDoc * pDoc = GetDocument();
	if(( nItemIndex=GetListCtrl().GetNextItem(-1,LVNI_SELECTED))!=-1)
	{
		try
		{   
			pDoc->Rs->Move(nItemIndex,(long)adBookmarkFirst);
			strNO		= pDoc->Rs->GetCollect(_bstr_t("组号")); 
			strDev		= pDoc->Rs->GetCollect(_bstr_t("设备名称")); 
			strBombName = pDoc->Rs->GetCollect(_bstr_t("氧弹编号")); 
			dt			= pDoc->Rs->GetCollect(_bstr_t("试验日期")); 
			strTime1.Format(_T("#%d-%d-%d#"),dt.GetYear(),dt.GetMonth(),dt.GetDay());
			dt= MakeDays(1)+dt;
			strTime2.Format(_T("#%d-%d-%d#"),dt.GetYear(),dt.GetMonth(),dt.GetDay());
			CString	strSQL;
			strSQL.Format(_T("select * from 热容量 where 组号=%s and 设备名称='%s' and 氧弹编号='%s' and 试验日期>=%s and 试验日期<=%s"),VariantToStr(strNO),VariantToStr(strDev) ,VariantToStr(strBombName) ,strTime1 ,strTime2); 

			HRESULT hr; 	
			if(pDoc->RsPrintData->State==adStateOpen)
				pDoc->RsPrintData->Close();
			
			hr = pDoc->RsPrintData->Open(strSQL.AllocSysString(),
				theApp.pConn.GetInterfacePtr(),
				adOpenStatic,
				adLockOptimistic,
				-1);
			TESTHR(hr);   
			
			if(pDoc->RsTitle->State==adStateOpen)
				pDoc->RsTitle->Close();
			strSQL = "select * from 系统参数";
			hr = GetDocument()->RsTitle->Open(strSQL.AllocSysString(),
				theApp.pConn.GetInterfacePtr(),
				adOpenStatic,
				adLockOptimistic,
				-1);
			TESTHR(hr); 
			
			
			
			pReportdlg.Init(0);
			pReportdlg.SetModifyPrepared(TRUE);
			CString File(pDlg->cPath);
			File+=_T("reports\\")+pDlg->cFile;
			LPCTSTR path = File.GetBuffer(File.GetLength());
			pReportdlg.SetReportFile(path);
			File.ReleaseBuffer();
			// 增加一个数据表 
			pReportdlg.SetModifyPrepared(TRUE);
			LPCTSTR dbName1  = _T("SReportHeat");
			pReportdlg.AddAdoDataSet(dbName1,((CLryEDBQryDoc*)GetDocument())->RsPrintData);
			// 增加一个数据表 
			pReportdlg.SetModifyPrepared(TRUE);	
			LPCTSTR dbName2 = _T("CopyEmit");
			pReportdlg.AddAdoDataSet(dbName2,((CLryEDBQryDoc*)GetDocument())->RsTitle);
			if(pDlg->m_iSelect==0)
				pReportdlg.ShowReport();       //设计报表 
			else
				pReportdlg.DesignReport();		// 预览报表 
			
		}
		catch(_com_error &e)
		{ 
			dump_com_error(e);
		} 
	}
}
示例#27
0
//装载所有的城战参数
bool CRsDupRgn::LoadAll(_ConnectionPtr& cn)
{
	if(cn == NULL)
	{
		AddLogText(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_CNPTRNULL));
		return false;
	}

	_RecordsetPtr rs;
	try
	{
		GetGame()->GetDBEntityManager()->ClearDupRgnMap();

		TESTHR(CreateRs(rs));
		TESTHR(OpenRs("SELECT * FROM CSL_DUPRGN_PROPERTY", rs, cn));
		while(!rs->GetadoEOF())
		{
			// GUID
			CGUID guid((_bstr_t)rs->GetCollect("guid"));
			CDBDupRgn* dupRgn = new CDBDupRgn(guid);

			char szGUID[128];
			dupRgn->GetExID().tostring(szGUID);

			CDataEntityManager::EntityPropertyMapItr epItr = dupRgn->GetDataEntityManager().GetEntityPropertyMap().begin();
			for(; epItr != dupRgn->GetDataEntityManager().GetEntityPropertyMap().end(); epItr++)
			{
				if(epItr->second->GetDBTableName() == "CSL_DUPRGN_PROPERTY")
				{
					switch(epItr->second->GetDataType())
					{
					case DATA_OBJECT_TIME:
						{
							_variant_t var = rs->GetCollect(epItr->first.c_str());
							long timeBuf[6] = {0};
							if( var.vt != VT_NULL ) 
							{
								SYSTEMTIME st;
								VariantTimeToSystemTime(var.date, &st);
								
								timeBuf[0] = st.wYear;
								timeBuf[1] = st.wMonth;
								timeBuf[2] = st.wDay;
								timeBuf[3] = st.wHour;
								timeBuf[4] = st.wMinute;
								timeBuf[5] = st.wSecond;
								epItr->second->SetBufAttr(0, (void*)&timeBuf[0], sizeof(DWORD)*6);
							}
						}
						break;
					case  DATA_OBJECT_STRING:
						{
							string strValue = (_bstr_t)rs->GetCollect(epItr->first.c_str());
							epItr->second->SetStringAttr(0, strValue.c_str());
						}
						break;
					case DATA_OBJECT_BUFFER:
						{
							LoadBufferField((CBaseDBEntity*)dupRgn, epItr->first.c_str(), rs);
						}
						break;
					case DATA_OBJECT_GUID:
						{
							CGUID tGUID(_bstr_t(rs->GetCollect(epItr->first.c_str())));
							epItr->second->SetGuidAttr(0, tGUID);
						}
						break;
					case DATA_OBJECT_FLOAT:
					case DATA_OBJECT_LONG:
					case DATA_OBJECT_SHORT:
					case DATA_OBJECT_ULONG:
					case DATA_OBJECT_USHORT:
					case DATA_OBJECT_BOOL:
					case DATA_OBJECT_CHAR:
					case DATA_OBJECT_BYTE:
					case DATA_OBJECT_WORD:
					case DATA_OBJECT_DWORD:
						{
							long value = rs->GetCollect(epItr->first.c_str());
							epItr->second->SetLongAttr(0, value);
						}
						break;
					}
				}
			}

			char outStrx[128];			
			// 读取房间内物品
			if(LoadDupRgnObj(dupRgn->GetExID(),dupRgn->GetGoodsGroupPtr(), cn) == false)
			{
				sprintf(outStrx, CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_LOADRGNOBJERR), szGUID);
				PrintErr(outStrx);
				return false;
			}
			
			GetGame()->GetDBEntityManager()->GetDBDupRgnMap()[guid] = dupRgn;

			sprintf(outStrx, CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_LOADRGNOK), szGUID);
			AddLogText(outStrx);

			// 下条记录
			rs->MoveNext();
		}

		ReleaseRs(rs);

		return true;
	}
	catch (_com_error &e)
	{
		ReleaseRs(rs);
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_LOADRGNERR), e);
		return true;
	}

	return true;
}
示例#28
0
//! 读取个人房屋信息
void CRsDupRgn::LoadDupRgn(CDBDupRgn* dupRgn, _ConnectionPtr& cn)
{
	_RecordsetPtr rs;
	char sql[500] = "";
	if(cn == NULL)
	{
		AddLogText(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_CNPTRNULL));
		return;
	}

	try
	{
		TESTHR(CreateRs(rs));

		char szGUID[128];
		dupRgn->GetExID().tostring(szGUID);

	//	TESTHR(OpenRs("CSL_DUPRGN_PROPERTY", rs, cn, adOpenForwardOnly, adLockOptimistic, adCmdTable));
		sprintf(sql, "SELECT * FROM CSL_DUPRGN_PROPERTY WHERE guid='%s'", szGUID);
	//	// 先查找该个人房屋的成员
		TESTHR(OpenRs(sql, rs, cn));
		CDataEntityManager::EntityPropertyMapItr epItr = dupRgn->GetDataEntityManager().GetEntityPropertyMap().begin();
		for(; epItr != dupRgn->GetDataEntityManager().GetEntityPropertyMap().end(); epItr++)
		{
			if(epItr->second->GetDBTableName() == "CSL_DUPRGN_PROPERTY")
			{
				switch(epItr->second->GetDataType())
				{
				case DATA_OBJECT_TIME:
					{
						_variant_t var = rs->GetCollect(epItr->first.c_str());
						long timeBuf[6] = {0};
						if( var.vt != VT_NULL ) 
						{
							SYSTEMTIME st;
							VariantTimeToSystemTime(var.date, &st);

							timeBuf[0] = st.wYear;
							timeBuf[1] = st.wMonth;
							timeBuf[2] = st.wDay;
							timeBuf[3] = st.wHour;
							timeBuf[4] = st.wMinute;
							timeBuf[5] = st.wSecond;
							epItr->second->SetBufAttr(0, (void*)&timeBuf[0], sizeof(DWORD)*6);
						}		
					}
					break;
				case  DATA_OBJECT_STRING:
					{
						string strValue = (_bstr_t)rs->GetCollect(epItr->first.c_str());
						epItr->second->SetStringAttr(0, strValue.c_str());
					}
					break;
				case DATA_OBJECT_BUFFER:
					{
						LoadBufferField((CBaseDBEntity*)dupRgn, epItr->first.c_str(), rs);
					}
					break;
				case DATA_OBJECT_GUID:
					{
						CGUID tGUID(_bstr_t(rs->GetCollect(epItr->first.c_str())));
						epItr->second->SetGuidAttr(0, tGUID);
					}
					break;
				case DATA_OBJECT_FLOAT:
				case DATA_OBJECT_LONG:
				case DATA_OBJECT_SHORT:
				case DATA_OBJECT_ULONG:
				case DATA_OBJECT_USHORT:
				case DATA_OBJECT_BOOL:
				case DATA_OBJECT_CHAR:
				case DATA_OBJECT_BYTE:
				case DATA_OBJECT_WORD:
				case DATA_OBJECT_DWORD:
					{
						long value = rs->GetCollect(epItr->first.c_str());
						epItr->second->SetLongAttr(0, value);
					}
					break;
				}
			}
		}
		ReleaseRs(rs);
		// 读取房间内物品
		LoadDupRgnObj(dupRgn->GetExID(), dupRgn->GetGoodsGroupPtr(), cn);
		return;
	}
	catch (_com_error &e)
	{
		ReleaseRs(rs);
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_LOADONERGNFAIL), e);
		return;
	}

	return;
}
示例#29
0
//! 保存个人房屋信息
void CRsDupRgn::SaveDupRgn(CDBDupRgn* dupRgn, _ConnectionPtr& cn)
{	
	if(cn == NULL)
	{
		AddLogText(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_FINDDUPRGNPROPERTYERR));
		return;
	}

	_RecordsetPtr rs;
	char sql[1024] = "";
	try
	{
		TESTHR(CreateRs(rs));

		char szGUID[128];
		dupRgn->GetExID().tostring(szGUID);
		
		sprintf(sql, "select * from dbo.CSL_DUPRGN_PROPERTY where guid='%s'", szGUID);
		TESTHR(OpenRs(sql, rs, cn, adOpenDynamic, adLockOptimistic));
	
		bool isNewCreated = false;
		if(rs->GetadoEOF()) // 没有记录,创建一个
		{
			rs->AddNew();
			isNewCreated = true;
		}

		set<string>::iterator epItr = dupRgn->GetDirtyAttrDataMap().begin();
		for(; epItr != dupRgn->GetDirtyAttrDataMap().end(); epItr++)
		{
			CEntityProperty* ep = dupRgn->GetDataEntityManager().GetEntityProperty(*epItr);
			if(ep)
			{
				if(ep->GetDBTableName() == "CSL_DUPRGN_PROPERTY")
				{
					switch(ep->GetDataType())
					{
					case DATA_OBJECT_TIME:
						{
							char szTimeValue[2048];
							DWORD timeValue[6] = {0};
							ep->GetBufAttr(0, (void*)timeValue, 6*sizeof(DWORD));
							if(szTimeValue[0] != 0 && szTimeValue[1] != 0 && szTimeValue[2] != 0
								&& szTimeValue[3] != 0 && szTimeValue[4] != 0 && szTimeValue[5] != 0)
							{
								sprintf(szTimeValue, "%d-%d-%d %d:%d:%d", timeValue[0], timeValue[1], timeValue[2],
									timeValue[3], timeValue[4], timeValue[5]);
								rs->PutCollect((*epItr).c_str(), szTimeValue);
							}
						}
						break;
					case  DATA_OBJECT_STRING:
						{
							const char* pStr = ep->GetStringAttr(0);
							if(pStr)
								rs->PutCollect((*epItr).c_str(), pStr);
						}
						break;
					case DATA_OBJECT_BUFFER:
						{
							SaveBufferField((CBaseDBEntity*)dupRgn, (*epItr).c_str(), rs);
						}
						break;
					case DATA_OBJECT_GUID:
						{
							CGUID tGUID;
							ep->GetGuidAttr(0, tGUID);
							char szGUID[128];
							tGUID.tostring(szGUID);
							if( (ep->GetDbFlag() == 0) ) // 0:非主键,1:主键
								rs->PutCollect((*epItr).c_str(), szGUID);
							else if(isNewCreated) // 是主键但是是刚创建对象
								rs->PutCollect((*epItr).c_str(), szGUID);
						}
						break;
					case DATA_OBJECT_BOOL:
					case DATA_OBJECT_CHAR:
					case DATA_OBJECT_BYTE:
						{
							rs->PutCollect((*epItr).c_str(), (BYTE)ep->GetLongAttr(0));
						}
						break;
					case DATA_OBJECT_SHORT:
					case DATA_OBJECT_WORD:
					case DATA_OBJECT_USHORT:
						{
							rs->PutCollect((*epItr).c_str(), (WORD)ep->GetLongAttr(0));
						}
						break;
					case DATA_OBJECT_FLOAT:
					case DATA_OBJECT_LONG:
					case DATA_OBJECT_ULONG:
					case DATA_OBJECT_DWORD:
						{
							rs->PutCollect((*epItr).c_str(), (DWORD)ep->GetLongAttr(0));
						}
						break;
					}
				}
			}
		}
		rs->Update();
		ReleaseRs(rs);
		return;
	}
	catch (_com_error &e)
	{
		ReleaseRs(rs);
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_SAVERGNOBJFAIL), e);
		return;
	}

	return;
}
示例#30
0
//! 读取个人房屋内的物品信息
bool    CRsDupRgn::LoadDupRgnObj(const CGUID& rgnGUID, CDBRgnGoodsGroup* goodsGroup, _ConnectionPtr& cn)
{
	bool ret = false;

	if(cn == NULL)
	{
		AddLogText(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_CNPTRNULL));
		return ret;
	}

	_RecordsetPtr rs;
	char sql[1024] = "";
	try
	{
		TESTHR(CreateRs(rs));

		char szGUID[128];
		rgnGUID.tostring(szGUID);

		// 先查找该个人房屋的成员
		sprintf(sql, "SELECT * FROM CSL_DUPRGN_GOODS WHERE DupRgnGUID='%s'", szGUID);
		TESTHR(OpenRs(sql, rs, cn));

		while(!rs->GetadoEOF())
		{
			// 基本属性部分
			_variant_t vGoodsID = rs->GetCollect("guid");
			CGUID guid = CGUID(((char*)(_bstr_t)vGoodsID));

			CDBRgnGoods* pGoods = new CDBRgnGoods(guid);
			CDataEntityManager::EntityPropertyMapItr epItr = pGoods->GetDataEntityManager().GetEntityPropertyMap().begin();
			for(; epItr != pGoods->GetDataEntityManager().GetEntityPropertyMap().end(); epItr++)
			{
				switch(epItr->second->GetDataType())
				{
				case DATA_OBJECT_TIME:
					{
						_variant_t var = rs->GetCollect(epItr->first.c_str());
						long timeBuf[6] = {0};
						if( var.vt != VT_NULL ) 
						{
							SYSTEMTIME st;
							VariantTimeToSystemTime(var.date, &st);

							timeBuf[0] = st.wYear;
							timeBuf[1] = st.wMonth;
							timeBuf[2] = st.wDay;
							timeBuf[3] = st.wHour;
							timeBuf[4] = st.wMinute;
							timeBuf[5] = st.wSecond;
							epItr->second->SetBufAttr(0, (void*)&timeBuf[0], sizeof(DWORD)*6);
						}		
					}
					break;
				case  DATA_OBJECT_STRING:
					{
						string strValue = (_bstr_t)rs->GetCollect(epItr->first.c_str());
						epItr->second->SetStringAttr(0, strValue.c_str());
					}
					break;
				case DATA_OBJECT_BUFFER:
					{
						LoadBufferField((CBaseDBEntity*)pGoods, epItr->first.c_str(), rs);
					}
					break;
				case DATA_OBJECT_GUID:
					{
						CGUID tGUID(_bstr_t(rs->GetCollect(epItr->first.c_str())));
						epItr->second->SetGuidAttr(0, tGUID);
					}
					break;
				case DATA_OBJECT_FLOAT:
				case DATA_OBJECT_LONG:
				case DATA_OBJECT_SHORT:
				case DATA_OBJECT_ULONG:
				case DATA_OBJECT_USHORT:
				case DATA_OBJECT_BOOL:
				case DATA_OBJECT_CHAR:
				case DATA_OBJECT_BYTE:
				case DATA_OBJECT_WORD:
				case DATA_OBJECT_DWORD:
					{
						long value = rs->GetCollect(epItr->first.c_str());
						epItr->second->SetLongAttr(0, value);
					}
					break;
				}
			}

			goodsGroup->GetGoodsGroupMap()[pGoods->GetExID()] = pGoods;
			// 下条记录
			rs->MoveNext();
		}

		ReleaseRs(rs);
		
		return true;
	}
	catch (_com_error &e)
	{
		ReleaseRs(rs);
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_LOADRGNGOODSFAIL), e);
		return false;
	}

	return true;
}