BOOL CAdoParameter::GetValue(CString &value) { try { value = vartostr(m_pParameter->Value); return TRUE; } catch (_com_error e) { TRACE(_T("Warning: GetValue 方法发生异常. 错误信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__); return FALSE; } }
//读入一个模型 BOOL CDiagRunView::read_one_model(CString model_name) { m_sqlserver_db.dbname=CString(model_name); CClientDC dc(this); OnPrepareDC(&dc); CString Datasource; Datasource.Format("Provider=SQLOLEDB.1; Data Source=%s; Initial Catalog=%s; User ID=%s; PWD=%s", m_sqlserver_db.dbsrc,m_sqlserver_db.dbname,m_sqlserver_db.user,m_sqlserver_db.pass); HRESULT hr = m_pConnection->Open(_bstr_t(LPCTSTR(Datasource)),"","",-1);///连接数据库 //上面一句中连接字串中的Provider是针对SQL Server环境的 /*读入数据*/ /* //读被测对象属性表 try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("OBJECT_Table",_variant_t((IDispatch*)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdTable); while(!m_pRecordset->adoEOF) { m_pRecordset->GetCollect("对象序号"); m_pRecordset->GetCollect("对象号"); m_pRecordset->GetCollect("任务号"); m_pRecordset->GetCollect("对象名称"); m_pRecordset->GetCollect("对象描述"); //?=vartostr(); m_pRecordset->MoveNext(); } m_pRecordset.Release(); } catch(_com_error e)///捕捉异常 { AfxMessageBox("读取被测对象属性表失败!");///显示错误信息 } */ //读结点表 try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("NODES_Table",_variant_t((IDispatch*)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdTable); while(!m_pRecordset->EndOfFile) { long value; IBaseCom * pCom = NULL; int com_no=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("图形形状")))); CLSID clsid=*CLSIDArray[com_no]; IID iid=*IIDArray[com_no]; HRESULT hr=::CoCreateInstance(clsid, NULL, CLSCTX_ALL, iid, (void **)&pCom); if ( !SUCCEEDED(hr) ) { MessageBox("init node_com fail"); return false; } Node * node = new Node(pCom); node->SetActive(FALSE); value=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("结点号")))); node_id_count=value+1; node->SetID(value); //m_pRecordset->GetCollect("任务号"); //m_pRecordset->GetCollect("对象序号"); value=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("层号")))); node->layer=value; //m_pRecordset->GetCollect("层中序号"); //m_pRecordset->GetCollect("父结点号"); node->inLine=NULL; node->SetName(vartostr(m_pRecordset->GetCollect("结点名称"))); //m_pRecordset->GetCollect("结点中文名称"); node->comment=vartostr(m_pRecordset->GetCollect("结点描述")); CPoint pos1, pos2; /* pos1.x=0; pos1.y=0; pos2.x=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("X坐标")))); pos2.y=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("Y坐标")))); node->SetScrPos(pos1); node->SetTopLeft(pos2); */ pos1.x=scrollpos.x; pos1.y=scrollpos.y; pos2.x=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("X坐标"))))-scrollpos.x; pos2.y=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("Y坐标"))))-scrollpos.y; node->SetScrPos(pos1); node->SetTopLeft(pos2); //m_pRecordset->GetCollect("图形线型"); //m_pRecordset->GetCollect("图形线宽"); m_model_scale=atof(vartostr(m_pRecordset->GetCollect("比例"))); GraphInfo * gi = node->GetGraphInfo(); //m_pRecordset->GetCollect("图形颜色")))); //m_pRecordset->GetCollect("字体"); //m_pRecordset->GetCollect("字号"); //m_pRecordset->GetCollect("字体颜色"); //m_pRecordset->GetCollect("填充类型"); gi->normal_regioncolor=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("填充颜色")))); node->SetGraphInfo(gi); //m_pRecordset->GetCollect("正在运行"); //m_pRecordset->GetCollect("分析标志"); int flag=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("删除标志")))); if (flag==1) node->SetDeleted(true); else node->SetDeleted(false); //node->SetActive(TRUE); NodeArray.Add(node); if (!node->IsDeleted()) node->Draw(&dc, pos2, pos1, m_model_scale, &m_GraphInfo, 1, node->GetActive()); m_pRecordset->MoveNext(); } m_pRecordset.Release(); } catch(_com_error e)///捕捉异常 { AfxMessageBox("读取结点表失败!");///显示错误信息 } //读连线表 try { CPoint startPoint, endPoint; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("LINE_Table",_variant_t((IDispatch*)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdTable); while(!m_pRecordset->EndOfFile) { long value; Node *parentnode,*sonnode; IMyLineCom * pLineCom = NULL; HRESULT hr = ::CoCreateInstance(CLSID_MyLineCom, NULL, CLSCTX_ALL, IID_IMyLineCom, (void **)&pLineCom); if ( !SUCCEEDED(hr) ) { MessageBox("创建Line_COM错误"); return false; } Line * line = new Line((IBaseCom*)pLineCom); line->SetActive(FALSE); value=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线号")))); line->SetID(value); line_id_count=value+1; //m_pRecordset->GetCollect("任务号"); //m_pRecordset->GetCollect("对象序号"); value=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("父结点号")))); parentnode=Get_Node_In_NodeArray(value); //m_pRecordset->GetCollect("父结点类型"); //m_pRecordset->GetCollect("父结点层号"); //m_pRecordset->GetCollect("父结点层中号"); value=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("子结点号")))); sonnode=Get_Node_In_NodeArray(value); //m_pRecordset->GetCollect("子结点类型"); //m_pRecordset->GetCollect("子结点层号"); //m_pRecordset->GetCollect("子结点层中号"); line->SetName(vartostr(m_pRecordset->GetCollect("连线名称"))); //m_pRecordset->GetCollect("连线中文名称"); line->comment=vartostr(m_pRecordset->GetCollect("连线描述")); CPoint pos1,pos2; pos1.x=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线起点X"))))-scrollpos.x; pos1.y=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线起点Y"))))-scrollpos.y; pos2.x=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线终点X"))))-scrollpos.x; pos2.y=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线终点Y"))))-scrollpos.y; GraphInfo * gi = line->GetGraphInfo(); gi->normal_penStyle=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线类型")))); gi->normal_linewidth=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线宽度")))); gi->normal_linecolor=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线颜色")))); line->SetGraphInfo(gi); //m_pRecordset->GetCollect("箭头类型"); //m_pRecordset->GetCollect("分析标志"); int flag=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("删除标志")))); if (flag==1) line->SetDeleted(true); else { line->SetDeleted(false); line->parentNode = parentnode; line->sonNode = sonnode; sonnode->inLine=line; parentnode->outLine.Add(line); line->GetCom()->SetStartPoint((unsigned long)&pos1); line->GetCom()->SetEndPoint((unsigned long)&pos2); line->Draw(&dc, pos1, scrollpos, m_model_scale, 0, 1, line->GetActive()); } LineArray.Add(line); m_pRecordset->MoveNext(); } m_pRecordset.Release(); } catch(_com_error e)///捕捉异常 { AfxMessageBox("读取连线表失败!");///显示错误信息 } if(m_pConnection->State) m_pConnection->Close(); ///如果已经打开了连接则关闭它 return true; }