Esempio n. 1
0
/////////////////////////////////////////////////////////////////////////////////////////
//
// 在记录集中当前游标位置设置指定的字段的值
//
// IRecordset[in]	记录集智能指针	
// FieldsName[in]	字段名
// Value[in]		新的值
//
// 如果有异常将调用ExceptionInfo函数
//
// 如果Value为空或全为空格字符,当指定的字段的类型为字符串型时,字段的值为空
// 如果字段的类型为数字型,字段的值为0
//
void CFoxBase::PutTbValue(_RecordsetPtr IRecordset, _variant_t FieldsName, CString Value)
{
	adoDataTypeEnum DataType;

	if(IRecordset==NULL)
		return;

	Value.TrimLeft();
	Value.TrimRight();

	try
	{
		if(Value.IsEmpty())
		{
			IRecordset->GetFields()->GetItem(FieldsName)->get_Type(&DataType);
			
			if(DataType==adBSTR || DataType==adChar || DataType==adVarChar || 
			   DataType==adVarWChar ||DataType==adWChar)
			{
				Value=_T("");
			}
			else
			{
				Value=_T("0");
			}
		}

		IRecordset->PutCollect(FieldsName,_variant_t(Value));
		IRecordset->Update();
	}
	catch(_com_error /*&e*/)
	{
//		ExceptionInfo(e);
		throw;
	}

}
Esempio n. 2
0
BOOL CFoxBase::CopyData(_RecordsetPtr &IRecordS, _RecordsetPtr &IRecordD)
{
	_variant_t TempValue;
	short Item;
	FieldsPtr IFields;
	FieldPtr IField;

	if(IRecordS==NULL || IRecordD==NULL)
	{
		ExceptionInfo(_T("Source Recordset or destination Recordset cann't be empty"));
		return FALSE;
	}

	if(IRecordS->adoEOF && IRecordS->BOF)
	{
		return TRUE;
	}

	if(!IRecordD->adoEOF || !IRecordD->BOF)
	{
		try
		{
			IRecordD->MoveLast();
		}
		catch(_com_error &e)
		{
			ExceptionInfo(e);
			return FALSE;
		}
	}

	try
	{
		IRecordS->MoveFirst();
	}
	catch(_com_error &e)
	{
		ExceptionInfo(e);
		return FALSE;
	}

	try
	{
		while(!IRecordS->adoEOF)
		{
			IRecordS->get_Fields(&IFields);
			IRecordD->AddNew();
			for(Item=0;Item<IFields->GetCount();Item++)
			{
				IFields->get_Item(_variant_t(Item),&IField);

				TempValue=IRecordS->GetCollect(_variant_t(IField->GetName()));
				IRecordD->PutCollect(_variant_t(IField->GetName()),TempValue);

				IField.Release();
			}
			IRecordD->Update();
			IFields.Release();
			IRecordS->MoveNext();
		}
	}
	catch(_com_error &e)
	{
		ExceptionInfo(e);
		return FALSE;
	}


	return TRUE;
}
Esempio n. 3
0
/////////////////////////////////////////////////////
//
// 在记录集的当前位置插入一条新记录
//
// IRecord[in]	记录集智能指针
//
// 函数成功返回TRUE,否则返回FALSE
// 如果有异常将调用ExceptionInfo函数
//
// 函数成功后记录集将指向新插入的空记录
//
BOOL CFoxBase::InsertNew(_RecordsetPtr &IRecord,int after)
{
	int pos;
	CMap<short,short&,_variant_t,_variant_t&> FieldMap;
	CMap<short,short&,_variant_t,_variant_t&> newFieldMap;		//将新增加的记录的值记下来
	_variant_t TempValue;
	short Item;
	FieldsPtr IFields;
	FieldPtr IField;
    int pos1;
	int	nCount;		//字段个数.

	if(IRecord==NULL)
	{
		ExceptionInfo(_T("Recordset cann't be empty"));
		return FALSE;
	}

	//如果记录集为空将插入一条新记录
	if(IRecord->adoEOF && IRecord->BOF)
	{
		try
		{
			IRecord->AddNew();
			IRecord->Update();
		}
		catch(_com_error &e)
		{
			ExceptionInfo(e);
			return FALSE;
		}
		return TRUE;
	}
	else if(IRecord->adoEOF)
	{
		IRecord->AddNew();
		IRecord->Update();
		IRecord->MoveLast();
		return true;
	}

	for(pos=0; !IRecord->adoEOF ;pos++)
	{
		try
		{
			IRecord->MoveNext();
		}
		catch(_com_error &e)
		{
			ExceptionInfo(e);
			return FALSE;
		}
	}

	//
	// 查如一条新记录,并将刚开始所指的以后的记录向后移
	//
	try
	{
		IRecord->AddNew();
		IRecord->Update();
		IRecord->MoveLast();

		//将新增加的记录的值记下来.
		IFields = IRecord->GetFields();
		nCount = IFields->GetCount();   //字段个数

		for (Item = 0; Item < nCount; Item++)
		{
			newFieldMap[Item] = IRecord->GetCollect(_variant_t(Item));
		}
		IFields.Release();
		//		

		IRecord->MovePrevious();
	}
	catch(_com_error &e)
	{
		ExceptionInfo(e);
		return FALSE;
	}
	if(after==1)
    pos--;  //使pos再减一,变成在指针的当前位置上加入一条新记录,insert blank
	pos1=pos;
	while(pos>0)
	{
		try
		{
			for(Item=0;Item<nCount;Item++)
			{
				TempValue=IRecord->GetCollect(_variant_t(Item));
				FieldMap[Item]=TempValue;
			}

			IRecord->MoveNext();

			for(Item=0;Item<nCount;Item++)
			{
				IRecord->PutCollect(_variant_t(Item),FieldMap[Item]);
			}
			IRecord->Update();

			IRecord->MovePrevious();

			pos--;
			if(pos>0)
				IRecord->MovePrevious();
		}
		catch(_com_error &e)
		{
			ExceptionInfo(e);
			return FALSE;
		}
	}

	// 使最开始所指的记录内容为空
	if(pos1==0 && after==1) {IRecord->MoveNext();}
	else
	{

	try
	{
		TempValue.Clear();

		for(Item=0;Item<nCount;Item++)
		{
			IRecord->PutCollect(_variant_t(Item),newFieldMap[Item]);
		}
		IRecord->Update();
	}
	catch(_com_error &e)
	{
		ExceptionInfo(e);
		return FALSE;
	}
	}

	return TRUE;
}
Esempio n. 4
0
//导入弹簧数据(变力弹簧)
void CAESARIIToPHS::ImportHanger(_RecordsetPtr rsData,long node,CString strJOBNAME_P)
{
	CString strSQL;
	_RecordsetPtr pRs;
	double dLoadx=1.0;//力的单位转换因子
	double dFOffset=0.0;//力的偏移量
	_variant_t tmpvar;
	CString str;
	CString strSize;
	CString strPHSType;
	try
	{
		strSQL.Format(_T("SELECT * FROM [OUTPUT_HANGERS] WHERE [NODE] = %d AND [JOBNAME] =  '%s'" ),
			node,strJOBNAME_P);
		pRs = m_pConnSourceDB->Execute(_bstr_t(strSQL),NULL,adCmdText);
		if(!(pRs->BOF&&pRs->adoEOF))
		{
			pRs->MoveFirst();
			//力的单位转换
		/*
			str=vtos(pRs->GetCollect(_T("LOAD_UNITS")));
			str.TrimLeft();
			str.TrimRight();
			str.MakeLower();
			dLoadx=UnitsToUeUnits(rsData,str,m_strUNITFORCE,dFOffset);
			if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据
		*/	
			//pgz1工作荷载已经在表:OUTPUT_RESTRAINTS中导入了
			//	rsData->PutCollect("pgz1",_variant_t(vtof(pRs->GetCollect("HOT_LOAD"))*dLoadx));
		//	rsData->PutCollect("paz0",_variant_t(vtof(pRs->GetCollect("TH_INSTALL_LOAD"))*dLoadx+dFOffset));
		//	rsData->PutCollect("paz1",_variant_t(vtof(pRs->GetCollect("AC_INSTALL_LOAD"))*dLoadx+dFOffset));
			
			double dLoadVariation = 0.0;
			dLoadVariation = vtof( pRs->GetCollect("LOAD_VARIATION") );
			if ( dLoadVariation < 1E-6 )
			{
				strPHSType = _T("9999"); //恒力弹簧
			}
			else //变力弹簧
			{
				rsData->PutCollect("CoefOfVarLoad",_variant_t( dLoadVariation /100 ) );
				tmpvar = pRs->GetCollect("SIZE");
				strSize.Format(_T("%02d"),vtoi(tmpvar));
				
				//并联数
				int iParalNum = vtoi( pRs->GetCollect( _T("NUMREQ") ) );
				CString strHangerType = vtos( pRs->GetCollect( _T("FIGNUM") ) );
				//串联数
				int iSeriesNum = 0;
				if ( !GetHangerSeriesNum(strHangerType,iSeriesNum) ) //得到弹簧不成功
				{
					CString strError;
					strError.Format( _T("无法通过弹簧类型%s获得弹簧的串联数,串联数默认为1"),strHangerType );
					AfxMessageBox( strError );
					iSeriesNum = 1;
				}
				
				//形成类似GLIF定义的支吊架类型号								
				strPHSType.Format( _T("%d%d%s"),iSeriesNum,iParalNum,strSize );
				
			}
			rsData->PutCollect("TYPE",_variant_t(strPHSType));
			rsData->PutCollect("psaTYPE",_variant_t(strPHSType));
		}
	}
	catch (_com_error &e)
	{
		CString strMsg;
		strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
		AfxMessageBox(strMsg);
	}
	if ( pRs->State == adStateOpen )
	{
		pRs->Close();
	}
}
Esempio n. 5
0
//导入管道外径、介质温度
void CAESARIIToPHS::ImportDiameter(_RecordsetPtr rsData,long node,CString strJOBNAME_A)
{
	CString strSQL;
	_RecordsetPtr pRs;
	double dDiameterx=1.0;//直径的换算因子
	double dDOffset=0.0;//直径偏移量
	double dT01x=1.0;//温度的换算因子
	double dTOffset=0.0;//温度偏移量
	CString str;
	pRs.CreateInstance(__uuidof(Recordset));
	try
	{
		strSQL.Format(_T("select * from input_units where jobname='%s'"),strJOBNAME_A);
		pRs=m_pConnSourceDB->Execute(_bstr_t(strSQL),NULL,adCmdText);
		str=vtos(pRs->GetCollect(_T("LENGTH")));
		str.TrimLeft();
		str.TrimRight();
		str.MakeUpper();
		if(!(str=="MM"))
		{
			dDiameterx=UnitsToUeUnits(rsData,str,"MM",dDOffset);
			if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据
			
		}
		str=vtos(pRs->GetCollect(_T("TEMP")));
		str.TrimLeft();
		str.TrimRight();
		str.MakeUpper();
		//pfg20050630
		dT01x=UnitsToUeUnits(rsData,str,"C",dTOffset);
		if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据

//chenbl 2010.05.15
		
	//找出单元记录
		//先找起点号
		pRs->Close();
		strSQL.Format(_T("SELECT * FROM [INPUT_BASIC_ELEMENT_DATA] WHERE [JOBNAME] =  '%s' AND [FROM_NODE] = %d"),strJOBNAME_A,node);
		pRs->Open(_variant_t(strSQL),(IDispatch*)m_pConnSourceDB,adOpenStatic,adLockOptimistic,adCmdText);
		if ( pRs->BOF && pRs->adoEOF ) //没有找到记录
		{
			pRs->Close();
			//找末点
			strSQL.Format(_T("SELECT * FROM [INPUT_BASIC_ELEMENT_DATA] WHERE [JOBNAME] =  '%s' AND [TO_NODE] = %d"),strJOBNAME_A,node);
			pRs->Open(_variant_t(strSQL),(IDispatch*)m_pConnSourceDB,adOpenStatic,adLockOptimistic,adCmdText);
			if ( pRs->BOF && pRs->adoEOF ) //没有找到记录
			{
				pRs->Close();
				strSQL.Format(_T("SELECT * FROM [INPUT_BASIC_ELEMENT_DATA],[INPUT_BENDS] WHERE [INPUT_BENDS].[JOBNAME] =  '%s' AND  ( [INPUT_BENDS].NODE1 = %d OR [INPUT_BENDS].NODE2 = %d OR [INPUT_BENDS].NODE3 = %d ) AND [INPUT_BASIC_ELEMENT_DATA].BEND_PTR = [INPUT_BENDS].BEND_PTR"),
					strJOBNAME_A,node,node,node);
				pRs->Open(_variant_t(strSQL),(IDispatch*)m_pConnSourceDB,adOpenStatic,adLockOptimistic,adCmdText);
				if ( pRs->BOF && pRs->adoEOF ) //没有找到记录
				{
					pRs->Close();
					return;
				}
			}
		}
		rsData->PutCollect("DJ1",_variant_t(vtof(pRs->GetCollect("DIAMETER"))*dDiameterx+dDOffset));
		rsData->PutCollect("T01",_variant_t(vtof(pRs->GetCollect("TEMP_EXP_C1"))*dT01x+dTOffset));
		
		if(pRs->State==adStateOpen)
		{
			pRs->Close();
		}
	}
	catch (_com_error &e)
	{
		CString strMsg;
		strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
		AfxMessageBox(strMsg);
	}
}
Esempio n. 6
0
//导入支吊架的线位移、角位移
//rsData 结果表(ZA)记录集、strLGkname 工况名称、strJDBNAME_P 工程名称
//flag =1 热态 、flag=0为冷态
void CAESARIIToPHS::ImportDisplacements(_RecordsetPtr rsData,long node, CString strLGKname,CString strJOBNAME_P,int flag)
{
	double x= 1.0;//单位换算因子
	double dLOffset=0.0;//长度的偏移
	double dROffset=0.0;//角度的偏移
	CString strSQL,strError;
	CString strUnits;
	_RecordsetPtr prsDisplacements;
	prsDisplacements.CreateInstance(__uuidof(Recordset));
	try
	{
		if(flag)
		{
			//热态
			strSQL.Format(_T("SELECT * FROM [OUTPUT_DISPLACEMENTS] WHERE [NODE] = %d AND [CASE] = '%s' AND [JOBNAME] =  '%s' "),node,strLGKname,strJOBNAME_P);						
			prsDisplacements = m_pConnSourceDB->Execute(_bstr_t(strSQL),NULL,adCmdText);
			if ( prsDisplacements->adoEOF && prsDisplacements->BOF )
			{
				strError.Format( _T("OUTPUT_DISPLACEMENTS表中没有点号为%d用工况号为%s的数据"),node,strLGKname );
				AfxMessageBox( strError );
				prsDisplacements->Close();
				return;
			}
			
			//长度单位换算
			strUnits=vtos(prsDisplacements->GetCollect(_T("DUNITS")));
			strUnits.TrimLeft();
			strUnits.TrimRight();
			strUnits.MakeLower();
			if (strUnits == "mm")
			{
				x=1.0;
			}
			else
			{
				x=UnitsToUeUnits(rsData,strUnits,"mm",dLOffset);
				if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据

			}
			//热态线位移
			rsData->PutCollect("xr1",_variant_t(vtof(prsDisplacements->GetCollect("dX"))*x+dLOffset));
			rsData->PutCollect("yr1",_variant_t(vtof(prsDisplacements->GetCollect("dY"))*x+dLOffset));					 
			rsData->PutCollect("zr1",_variant_t(vtof(prsDisplacements->GetCollect("dZ"))*x+dLOffset));	
			rsData->PutCollect("UNIT_Displacement",_T("mm"));

			//角度单位换算
			strUnits=vtos(prsDisplacements->GetCollect(_T("RUNITS")));
			strUnits.TrimLeft();
			strUnits.TrimRight();
			if(strUnits=="弧度")
			{
				x=1.0;
			}
			else
			{
				x=UnitsToUeUnits(rsData,strUnits,"弧度",dROffset);
				if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据

			}
			//热态角位移
			rsData->PutCollect("rxR1",_variant_t(vtof(prsDisplacements->GetCollect("RX"))*x+dROffset));
			rsData->PutCollect("ryR1",_variant_t(vtof(prsDisplacements->GetCollect("RY"))*x+dROffset));					 
			rsData->PutCollect("rzR1",_variant_t(vtof(prsDisplacements->GetCollect("RZ"))*x+dROffset));	
		}
		else
		{
			//冷态
			strSQL.Format(_T("SELECT * FROM [OUTPUT_DISPLACEMENTS] WHERE [NODE] = %d AND [CASE] = '%s' AND [JOBNAME] =  '%s' "),node,strLGKname,strJOBNAME_P);						
			prsDisplacements = m_pConnSourceDB->Execute(_bstr_t(strSQL),NULL,adCmdText);

			if ( prsDisplacements->adoEOF && prsDisplacements->BOF )
			{
				strError.Format( _T("OUTPUT_DISPLACEMENTS表中没有点号为%d用工况号为%s的数据"),node,strLGKname );
				AfxMessageBox( strError );
				prsDisplacements->Close();
				return;
			}
			
			//长度单位换算
			strUnits=vtos(prsDisplacements->GetCollect(_T("DUNITS")));
			strUnits.TrimLeft();
			strUnits.TrimRight();
			strUnits.MakeLower();
			if (strUnits == "mm")
			{
				x=1.0;
			}
			else
			{
				x=UnitsToUeUnits(rsData,strUnits,"mm",dLOffset);
				if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据

			}
			//冷态线位移
			rsData->PutCollect("xL1",_variant_t(vtof(prsDisplacements->GetCollect("dX"))*x+dLOffset));
			rsData->PutCollect("yL1",_variant_t(vtof(prsDisplacements->GetCollect("dY"))*x+dLOffset));					 
			rsData->PutCollect("zL1",_variant_t(vtof(prsDisplacements->GetCollect("dZ"))*x+dLOffset));	

			//角度单位换算
			strUnits=vtos(prsDisplacements->GetCollect(_T("RUNITS")));
			strUnits.TrimLeft();
			strUnits.TrimRight();
			if(strUnits=="弧度")
			{
				x=1.0;
			}
			else
			{
				x=UnitsToUeUnits(rsData,strUnits,"弧度",dROffset);
				if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据

			}
			//冷态角位移
			rsData->PutCollect("rxL1",_variant_t(vtof(prsDisplacements->GetCollect("RX"))*x+dROffset));
			rsData->PutCollect("ryL1",_variant_t(vtof(prsDisplacements->GetCollect("RY"))*x+dROffset));					 
			rsData->PutCollect("rzL1",_variant_t(vtof(prsDisplacements->GetCollect("RZ"))*x+dROffset));	
		}
	}
	catch (_com_error &e)
	{
		CString strMsg;
		strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
		AfxMessageBox(strMsg);
	}
}
Esempio n. 7
0
//导入支架、吊架中的单位,各个方向的推力(冷态、热态)
//rsData为结果数据库	m_strLGKname为冷态、m_strRGKname为热态
//m_strJOBNAME_P 工程名称
void CAESARIIToPHS::importUnitsForces(_RecordsetPtr rsData,long node,CString m_strJOBNAME_P,CString PSA_OutDataFUnit,CString PSA_OutDataMUnit,CString m_strRGKname,CString m_strLGKname)
{
	CString strSQL;
	CString strMessage;
	_RecordsetPtr prsOutputRestraints;
	int i=0;
	int IsXYZ=0;//是否在x,y,z方向已经导入了数据,因为约束类型很多,对于同一方向有多
				//个约束时,需要提示用户我们还没有对这一种情况进行处理 当百位为1
				//表示x方向已经导入了数据,依此类推
	int IsmXYZ=0;//表示力矩,含义与IsXYZ类似
	double tmpVar;
	double dFx=1.0;//力的转换因子
	double dFOffset=0.0;//力的偏移量
	double dMx=1.0;//力矩的转换因子
	double dMOffset=0.0;//力矩的偏移量
	CString strFUnits;//力的单位;
	CString strMUnits;//力矩的单位

	double dICCWorkLoad = 0.0,dICCIncLoad = 0.0; //向上轴热态、冷态荷载

	strFUnits=PSA_OutDataFUnit;
	strMUnits=PSA_OutDataMUnit;
	CString strTmp;
	prsOutputRestraints.CreateInstance(__uuidof(Recordset));
	try
	{
		//转换后力的单位:kgf;力矩的单位:kgf.m写入ZA表中(start)			 				 
		rsData->PutCollect("Unit_Force",_variant_t(m_strUNITFORCE));
		rsData->PutCollect("Unit_Momental",_variant_t(m_strUNITMOMENTAL));
		//转换后力的单位:kgf;力矩的单位:kgf.m写入ZA表中(end)

		//导入热态的荷载、力矩(start)
		strSQL.Format(_T("SELECT * FROM [OUTPUT_RESTRAINTS] WHERE [NODE] = %d AND [CASE] = '%s' and JOBNAME='%s' "),node,m_strRGKname,m_strJOBNAME_P);
		prsOutputRestraints = m_pConnSourceDB->Execute(_bstr_t(strSQL),NULL,adCmdText);
		if(!(prsOutputRestraints->BOF&&prsOutputRestraints->adoEOF))
		{
			//pfg20050622(start)
			strTmp=vtos(prsOutputRestraints->GetCollect(_T("FUNITS")));
			strFUnits=(strTmp!="")?strTmp:strFUnits;
			//单位换算
			dFx=UnitsToUeUnits(rsData,strFUnits,m_strUNITFORCE,dFOffset);
			if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据
			strTmp=vtos(prsOutputRestraints->GetCollect(_T("MUNITS")));
			strMUnits=(strTmp!="")?strTmp:strMUnits;
			dMx=UnitsToUeUnits(rsData,strMUnits,m_strUNITMOMENTAL,dMOffset);
			if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据
			//pfg20050622(end)
			prsOutputRestraints->MoveFirst();
			while(!prsOutputRestraints->adoEOF)
			{
				tmpVar=vtof(prsOutputRestraints->GetCollect("FX"));
				if( (tmpVar!=0) && (IsXYZ/100==0) || i==0 )
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("pxr1",_variant_t(tmpVar*dFx+dFOffset));
					IsXYZ=(tmpVar!=0)?(IsXYZ+100):IsXYZ;
					if ( m_iUPxyz == 1 ) //X轴向上
					{
						dICCWorkLoad = tmpVar*dFx+dFOffset;
					}
				}
				else if((tmpVar!=0)&&(IsXYZ/100))
				{
					strMessage.Format("警告:节点号为%d的支吊点在X方向上有几个荷载(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}

				tmpVar=vtof(prsOutputRestraints->GetCollect("FY"));
				if(((tmpVar!=0)&&(((IsXYZ%100)/10)==0))||(i==0))
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("pyr1",_variant_t(tmpVar*dFx+dFOffset));
					IsXYZ=(tmpVar!=0)?(IsXYZ+10):IsXYZ;
					if ( m_iUPxyz == 2 ) //Y轴向上
					{
						dICCWorkLoad = tmpVar*dFx+dFOffset;
					}
				}
				else if((tmpVar!=0)&&((IsXYZ%100)/10))
				{
					strMessage.Format("警告:节点号为%d的支吊点在Y方向上有几个荷载(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}
				tmpVar=vtof(prsOutputRestraints->GetCollect("FZ"));
				if(((tmpVar!=0)&&(IsXYZ%10==0))||(i==0))
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("pzr1",_variant_t(tmpVar*dFx+dFOffset));
					IsXYZ=(tmpVar!=0)?(IsXYZ+1):IsXYZ;
					if ( m_iUPxyz == 3 ) //Z轴向上
					{
						dICCWorkLoad = tmpVar*dFx+dFOffset;
					}
				}
				else if((tmpVar!=0)&&(IsXYZ%10))
				{
					strMessage.Format("警告:节点号为%d的支吊点在Z方向上有几个荷载(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}
				tmpVar=vtof(prsOutputRestraints->GetCollect("MX"));
				if((tmpVar!=0)&&(IsmXYZ/100==0)||i==0)
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("mxr1",_variant_t(tmpVar*dMx+dMOffset));
					IsmXYZ=(tmpVar!=0)?(IsmXYZ+100):IsmXYZ;
				}
				else if((tmpVar!=0)&&(IsmXYZ/100))
				{
					strMessage.Format("警告:节点号为%d的支吊点在X方向上有几个力矩(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}
				tmpVar=vtof(prsOutputRestraints->GetCollect("MY"));
				if(((tmpVar!=0)&&(((IsmXYZ%100)/10)==0))||(i==0))
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("myr1",_variant_t(tmpVar*dMx+dMOffset));
					IsmXYZ=(tmpVar!=0)?(IsmXYZ+10):IsmXYZ;
				}
				else if((tmpVar!=0)&&((IsmXYZ%100)/10))
				{
					strMessage.Format("警告:节点号为%d的支吊点在Y方向上有几个力矩(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}
				tmpVar=vtof(prsOutputRestraints->GetCollect("MZ"));
				if(((tmpVar!=0)&&(IsmXYZ%10==0))||(i==0))
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("mzr1",_variant_t(tmpVar*dMx+dMOffset));
					IsmXYZ=(tmpVar!=0)?(IsmXYZ+1):IsmXYZ;
				}
				else if((tmpVar!=0)&&(IsmXYZ%10))
				{
					strMessage.Format("警告:节点号为%d的支吊点在Z方向上有几个力矩(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}
				i++;
				prsOutputRestraints->MoveNext();
			}
		}
		if(prsOutputRestraints->State==adStateOpen)
		{
			prsOutputRestraints->Close();
		}
		//导入热态的荷载、力矩(end)

		//导入冷态的荷载、力矩(start)
		IsXYZ=0;
		IsmXYZ=0;
		i=0;
		strSQL.Format(_T("SELECT * FROM [OUTPUT_RESTRAINTS] WHERE [NODE] = %d AND [CASE] = '%s' and JOBNAME='%s' "),node,m_strLGKname,m_strJOBNAME_P);
		prsOutputRestraints = m_pConnSourceDB->Execute(_bstr_t(strSQL),NULL,adCmdText);
		if(!(prsOutputRestraints->BOF&&prsOutputRestraints->adoEOF))
		{
			//pfg20050622(start)
			strTmp=vtos(prsOutputRestraints->GetCollect(_T("FUNITS")));
			strFUnits=(strTmp!="")?strTmp:strFUnits;
			//单位换算
			dFx=UnitsToUeUnits(rsData,strFUnits,m_strUNITFORCE,dFOffset);
			if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据
			strTmp=vtos(prsOutputRestraints->GetCollect(_T("MUNITS")));
			strMUnits=(strTmp!="")?strTmp:strMUnits;
			dMx=UnitsToUeUnits(rsData,strMUnits,m_strUNITMOMENTAL,dMOffset);
			if(m_IsCaesarError) return;//pfg20050629当单位转换出错、终止导入数据
			//pfg20050622(end)
			prsOutputRestraints->MoveFirst();
			while(!prsOutputRestraints->adoEOF)
			{
				tmpVar=vtof(prsOutputRestraints->GetCollect("FX"));
				if((tmpVar!=0)&&(IsXYZ/100==0)||i==0)
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("pxl1",_variant_t(tmpVar*dFx+dFOffset));
					IsXYZ=(tmpVar!=0)?(IsXYZ+100):IsXYZ;

					if ( m_iUPxyz == 1 ) //X轴向上
					{
						dICCIncLoad = tmpVar*dFx+dFOffset;
					}
				}
				else if((tmpVar!=0)&&(IsXYZ/100))
				{
					strMessage.Format("警告:节点号为%d的支吊点在X方向上有几个荷载(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}

				tmpVar=vtof(prsOutputRestraints->GetCollect("FY"));
				if(((tmpVar!=0)&&(((IsXYZ%100)/10)==0))||(i==0))
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("pyl1",_variant_t(tmpVar*dFx+dFOffset));
					IsXYZ=(tmpVar!=0)?(IsXYZ+10):IsXYZ;
					if ( m_iUPxyz == 2 ) //Y轴向上
					{
						dICCIncLoad = tmpVar*dFx+dFOffset;
					}
				}
				else if((tmpVar!=0)&&((IsXYZ%100)/10))
				{
					strMessage.Format("警告:节点号为%d的支吊点在Y方向上有几个荷载(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}
				tmpVar=vtof(prsOutputRestraints->GetCollect("FZ"));
				if(((tmpVar!=0)&&(IsXYZ%10==0))||(i==0))
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("pzl1",_variant_t(tmpVar*dFx+dFOffset));
					IsXYZ=(tmpVar!=0)?(IsXYZ+1):IsXYZ;
					if ( m_iUPxyz == 3 ) //Z轴向上
					{
						dICCIncLoad = tmpVar*dFx+dFOffset;
					}
				}
				else if((tmpVar!=0)&&(IsXYZ%10))
				{
					strMessage.Format("警告:节点号为%d的支吊点在Z方向上有几个荷载(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}
				tmpVar=vtof(prsOutputRestraints->GetCollect("MX"));
				if((tmpVar!=0)&&(IsmXYZ/100==0)||i==0)
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("mxl1",_variant_t(tmpVar*dMx+dMOffset));
					IsmXYZ=(tmpVar!=0)?(IsmXYZ+100):IsmXYZ;
				}
				else if((tmpVar!=0)&&(IsmXYZ/100))
				{
					strMessage.Format("警告:节点号为%d的支吊点在X方向上有几个力矩(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}
				tmpVar=vtof(prsOutputRestraints->GetCollect("MY"));
				if(((tmpVar!=0)&&(((IsmXYZ%100)/10)==0))||(i==0))
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("myl1",_variant_t(tmpVar*dMx+dMOffset));
					IsmXYZ=(tmpVar!=0)?(IsmXYZ+10):IsmXYZ;
				}
				else if((tmpVar!=0)&&((IsmXYZ%100)/10))
				{
					strMessage.Format("警告:节点号为%d的支吊点在Y方向上有几个力矩(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}
				tmpVar=vtof(prsOutputRestraints->GetCollect("MZ"));
				if(((tmpVar!=0)&&(IsmXYZ%10==0))||(i==0))
				{//当它是第一次导入或者以前在这一方向没有荷载
					rsData->PutCollect("mzl1",_variant_t(tmpVar*dMx+dMOffset));
					IsmXYZ=(tmpVar!=0)?(IsmXYZ+1):IsmXYZ;
				}
				else if((tmpVar!=0)&&(IsmXYZ%10))
				{
					strMessage.Format("警告:节点号为%d的支吊点在Z方向上有几力矩(请阅读使用说明)!",node);
					AfxMessageBox(strMessage);
				}
				i++;
				prsOutputRestraints->MoveNext();
			}
		}
		if(prsOutputRestraints->State==adStateOpen)
		{
			prsOutputRestraints->Close();
		}

		//先按默认的值设置工作荷载和安装荷载
		rsData->PutCollect("PGZ1",_variant_t( dICCWorkLoad) ); //工作荷载
		rsData->PutCollect("paz0", _variant_t( dICCIncLoad ) ); //安装荷载
		rsData->PutCollect("paz1", _variant_t( dICCIncLoad ) ); 

		double dMaxLoad = 0.0;
		//导入冷态的荷载、力矩(end)
		if ( IsHanger( node,m_strJOBNAME_P ) )
		{
			if ( m_iSpringLoadType == 1 ) //弹簧荷载提取工况方式(0:按上述选择的冷/热态提取荷载值 1按CAESARII弹簧表中的荷载值提取)
			{
				double dWorkLoad = 0.0,dInsLoad = 0.0;
				if ( GetHangerLoad( node,m_strJOBNAME_P,dWorkLoad,dInsLoad ) ) //得到弹簧荷载
				{
					rsData->PutCollect("PGZ1",_variant_t( dWorkLoad*dFx+dFOffset) );
					rsData->PutCollect("paz0", _variant_t( dInsLoad*dFx+dFOffset )); //冷态
					rsData->PutCollect("paz1", _variant_t( dInsLoad*dFx+dFOffset ));

					//改变向上轴的荷载值
					if ( m_iUPxyz == 1 )
					{
						rsData->PutCollect("pxl1", _variant_t( dInsLoad*dFx+dFOffset ));//冷态推力
						rsData->PutCollect("pxr1", _variant_t( dWorkLoad*dFx+dFOffset ));//热态推力
					}
					else if ( m_iUPxyz == 2 )
					{
						rsData->PutCollect("pyl1", _variant_t( dInsLoad*dFx+dFOffset ));//冷态推力
						rsData->PutCollect("pyr1", _variant_t( dWorkLoad*dFx+dFOffset ));//热态推力
					}
					else if ( m_iUPxyz == 3 )
					{
						rsData->PutCollect("pzl1", _variant_t( dInsLoad*dFx+dFOffset ));//冷态推力
						rsData->PutCollect("pzr1", _variant_t( dWorkLoad*dFx+dFOffset ));//热态推力
					}
				}
			}
		}
		
	}
	catch (_com_error &e)
	{
		CString strMsg;
		strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
		AfxMessageBox(strMsg);
	}
}
Esempio n. 8
0
//确定支架、吊架类型(约束)
//rsData 结果记录集(ZA表)
//node 当前的支吊节点
//strJOBNAME_A 工程名称,strLGKname
//返回:成功;支吊架的类型,如果没有返回0 ,请再更换另一种工况重试 
//注意:弹簧支吊架只简单分为可变弹簧和恒力弹簧
//支架也只处理以下几种:X、Y、Z、XY、XZ、YZ、XYZ
//iType:支吊架类型
void CAESARIIToPHS::ConversionTypeCaesarToPhs(_RecordsetPtr rsData,long node,CString strJOBNAME_P,CString strGKname,long &iType)
{
	_RecordsetPtr pRs;
	pRs.CreateInstance(__uuidof(Recordset));
	int i=0;
	iType=0;//支吊架类型:AutoPSA和AutoPHS的约束类型
	CString strType;//CAESARII的约束类型
	CString strLineType;//线位移的约束类型
	CString strRadType;//角位移的约束类型
	short iDECType=0;//线位移(十位)的约束类型
	short iNUMType=0;//角位移(个位)的约束类型
	CString strSQL;	
	strLineType=_T("");
	try
	{
		strSQL.Format(_T("SELECT * FROM [OUTPUT_RESTRAINTS] WHERE [NODE] = %d AND [CASE] = '%s' and JOBNAME='%s' "),node,strGKname,strJOBNAME_P);
		pRs->Open(_variant_t(strSQL),(IDispatch*)m_pConnSourceDB,adOpenStatic,adLockOptimistic,adCmdText);
		
		while ( !pRs->adoEOF )
		{
			strType = vtos( pRs->GetCollect( _T("TYPE") ) );
			strType.MakeUpper();
			//线位移约束
			if(strType=="RIGID X" || strType=="RIGID +X" || strType=="RIGID -X")
			{
				strLineType+="x";	
			}
			else if(strType=="RIGID Y" || strType=="RIGID +Y" || strType=="RIGID -Y")
			{
				strLineType+="y";
			}
			else if(strType=="RIGID Z" || strType=="RIGID +Z" || strType=="RIGID -Z")
			{
				strLineType+="z";
			}
			
			//角位移约束
			if(strType=="RIGID RX" || strType=="RIGID +RX" || strType=="RIGID -RX")
			{
				strRadType+="x";	
			}
			else if(strType=="RIGID RY" || strType=="RIGID +RY" || strType=="RIGID -RY")
			{
				strRadType+="y";
			}
			else if(strType=="RIGID RZ" || strType=="RIGID +RZ" || strType=="RIGID -RZ")
			{
				strRadType+="z";
			}
			else if(strType=="RIGID ANC")
			{
				strLineType = _T("xyz");
				strRadType+="xyz";
			} 
			else if ( strType == _T("GUIDE") )
			{
				iType = 260; //导向
				break;
			}
			pRs->MoveNext();
		}
		if( iType == 0)
		{//判断多方向约束的支吊架类型(start)
			//先确定约束类型十位上的数子,它由线位移确定
			//pfg20050630
			strLineType.TrimLeft();
			strLineType.TrimRight();
			if(!strLineType.IsEmpty())
			{
				//pfg20050630
				if(strLineType.Find("x")!=-1 && strLineType.Find("y")!=-1 && strLineType.Find("z")!=-1)
				{
					iDECType=7;
				}
				else if(strLineType.Find("y")!=-1 && strLineType.Find("z")!=-1 )
				{
					iDECType=6;
				}
				else if(strLineType.Find("x")!=-1 && strLineType.Find("z")!=-1 )
				{
					iDECType=5;
				}
				else if(strLineType.Find("x")!=-1 && strLineType.Find("y")!=-1 )
				{
					iDECType=4;
				}
				else if(strLineType.Find("z")!=-1 )
				{
					iDECType=3;
				}
				else if(strLineType.Find("y")!=-1 )
				{
					iDECType=2;
				}
				else if(strLineType.Find("x")!=-1 )
				{
					iDECType=1;
				}
			}
			//再确定约束类型个位上的数子,它由角位移确定
			//pfg20050630
			strRadType.TrimLeft();
			strRadType.TrimRight();
			if(!strRadType.IsEmpty())
			{
				//pfg20050630
				if(strRadType.Find("x")!=-1 && strRadType.Find("y")!=-1 && strRadType.Find("z")!=-1)
				{
					iNUMType=7;
				}
				else if(strRadType.Find("y")!=-1 && strRadType.Find("z")!=-1 )
				{
					iNUMType=6;
				}
				else if(strRadType.Find("x")!=-1 && strRadType.Find("z")!=-1 )
				{
					iNUMType=5;
				}
				else if(strRadType.Find("x")!=-1 && strRadType.Find("y")!=-1 )
				{
					iNUMType=4;
				}
				else if(strRadType.Find("z")!=-1 )
				{
					iNUMType=3;
				}
				else if(strRadType.Find("y")!=-1 )
				{
					iNUMType=2;
				}
				else if(strRadType.Find("x")!=-1 )
				{
					iNUMType=1;
				}
			}
			//转换成AutoPSA/AutoPHS约束类型iType
			iType=100+10*iDECType+iNUMType;
		}

		if(iType!=0)
		{
			rsData->PutCollect("TYPE",_variant_t(iType));
			rsData->PutCollect("psaTYPE",_variant_t(iType));
		}
	}
	catch (_com_error &e)
	{
		CString strMsg;
		strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description());
		AfxMessageBox(strMsg);
	}
}