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); } }
//! 删除个人房屋内的物品信息 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); } } }
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); } }
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; }
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(); }
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; }
// 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; }
//! 读取玩家的所有邮件信息 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; }
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); }
//测试表是否存在 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; }
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(); } }
//! 删除个人房屋内的物品信息 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; }
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); } }
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; }
//! 保存个人房屋内的物品信息 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; }
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(); }
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); } } }
//装载所有的城战参数 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; }
//! 读取个人房屋信息 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; }
//! 保存个人房屋信息 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; }
//! 读取个人房屋内的物品信息 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; }