⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ysdataprocess.cpp

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//#include "ysdataprocess.h"#include "../dataprocess.h"	//Liang	2006/7/19extern CPublicClass g_PublicClass;BCDataProcess::BCDataProcess(){}BCDataProcess::~BCDataProcess(){}bool BCDataProcess::ConnectDatabase(long &hdbc){	CDataBase db;	bool bc=db.ConnectDataBase(hdbc,g_PublicClass.m_dbname,g_PublicClass.m_dbuser,g_PublicClass.m_dbpass);	return bc;}bool BCDataProcess::DisConnectDatabase(long &hdbc){	CDataBase db;	bool bc=db.DisConnectDataBase(hdbc);	return bc;}///////////////////////////////检查数据库是否可以连接/////////////////////////////bool BCDataProcess::CheckDatabase(){	CDataBase db;long hdbc=0;	bool bc=db.ConnectDataBase(hdbc,g_PublicClass.m_dbname,g_PublicClass.m_dbuser,g_PublicClass.m_dbpass);	if(bc)	{		db.DisConnectDataBase(hdbc);	}	return bc;}///////////////////////////////检查数据库是否可以连接/////////////////////////////bool BCDataProcess::CheckDatabase(QString dbname,QString dbuser,QString dbpass){	CDataBase db;long hdbc=0;	bool bc=db.ConnectDataBase(hdbc,dbname,dbuser,dbpass);	if(bc)	{		db.DisConnectDataBase(hdbc);	}	return bc;}///////////////////////////////检查数据库句柄的可用性,如果不可用,重新连接数据库,并返回数据库句柄/////////bool BCDataProcess::isConnectDatabase(long &hdbc,bool &bNew,bool bForceCheck){	bool bc=false;CDataBase db;int ret=-1;QString SqlStr="";	if(hdbc<=0)			//数据库句柄非法	{		if(hdbc<=0) bNew=true; else bNew=false;		bc=db.ConnectDataBase(hdbc,g_PublicClass.m_dbname,g_PublicClass.m_dbuser,g_PublicClass.m_dbpass);		if(!bc){return 0;}		return true;	}	if(bForceCheck)	//强制检查句柄的可用性	{		SqlStr.sprintf("delete from DATABASESELFCHK;");ret=db.SqlExec(hdbc,SqlStr);		if(ret<0)		{			db.DisConnectDataBase(hdbc);			bc=db.ConnectDataBase(hdbc,g_PublicClass.m_dbname,g_PublicClass.m_dbuser,g_PublicClass.m_dbpass);			if(!bc){return 0;}		}	}	bNew=false;	return true;}//////////////////////////////删除表内记录//////////////////////////////满足RecordIndex=recordindex//bool BCDataProcess::DeleteRecordNoChild(long &hdbc,QString table,QString recordindex){	QCString SqlStr;	CDataBase db;int ret=0;bool bNew=false;	bool bc=isConnectDatabase(hdbc,bNew);if(!bc) return 0;	if(recordindex.isEmpty()||recordindex=="")	{		SqlStr.sprintf(" delete from %s ;",table.data());	}	else	{		SqlStr.sprintf(" delete from %s where recordindex='%s';",table.data(),recordindex.data());	}	ret=db.SqlExec(hdbc,SqlStr);if(bNew) db.DisConnectDataBase(hdbc);	if(ret<0) return 0;	return 1;}///////////////////////////删除表内记录////////////////////////////////////////////满足Where条件bool BCDataProcess::DeleteRecord(long &hdbc,QString table,QString Where){	QCString SqlStr;	CDataBase db;bool bNew=false;int ret=0;	bool bc=isConnectDatabase(hdbc,bNew);	if(!bc) return 0;	if(Where==""||Where.isEmpty()) Where="(1=1)";	SqlStr.sprintf(" delete from %s Where %s;",table.data(),Where.data());	ret=db.SqlExec(hdbc,SqlStr);	if(bNew) db.DisConnectDataBase(hdbc);	if(ret<0) return 0;	return 1;}///////////////////////////////得到一个字段的值///////////////////////////////////////满足Where条件的记录字段ResultField的值QString BCDataProcess::NormalQuery(long &hdbc,QString Table,QString Where,QString ResultField){	QCString SqlStr;int ret=0;long result=0;QString RecordIndex="";CDataBase db;bool bNew=0;	bool bc=isConnectDatabase(hdbc,bNew);	if(!bc) return "";	if(Where==""||Where.isEmpty()) Where="(1=1)";	SqlStr.sprintf(" select %s from %s where %s;",ResultField.data(),Table.data(),Where.data());	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0)	{		db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return "";	}	int rowcount=db.GetRecordCount(result);	for(int i=0;i<rowcount;i++)	{		RecordIndex=db.GetFieldValue(result,i,0);break;	}	db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);	return RecordIndex;}//////////////////////////////////////检查表内记录是否存在///////////////////////////////////int BCDataProcess::IsRecordExist(long &hdbc,QString table,QString Where){	QCString SqlStr;int ret=0;long result=0;CDataBase db;bool bNew=0;	//连接数据库	bool bc=isConnectDatabase(hdbc,bNew);	if(!bc) return 0;	if(Where==""||Where.isEmpty()) Where="(1=1)";	SqlStr.sprintf(" Select count(*) from %s where %s;",table.data(),Where.data());	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0)	{		db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return 0;	}	int rowcount=db.GetRecordCount(result);	if(rowcount<=0)	{		db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return 0;	}	int row=db.GetFieldValue(result,0,0).toInt();db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);	return (row);}/////////////////////////////////////从子站号得到子站的记录号////////////////////////////////iNo=子站编号//CIM模型移植到子站后,从SubStation表得到子站的记录号 by yys 2006/09/29QString BCDataProcess::GetRecordIndexByStationNo(long &hdbc,int iNo){	QString SqlStr;int ret=0;long result=0;QString RecordIndex="";bool bNew=0;CDataBase db;	bool bc=isConnectDatabase(hdbc,bNew);if(!bc) return "";	SqlStr.sprintf(" Select recordindex from SubStation where code=%d;",iNo);	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0)	{		db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return "";	}	int rowcount=db.GetRecordCount(result);	for(int i=0;i<rowcount;i++)	{		RecordIndex=db.GetFieldValue(result,i,0);break;	}	db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);	return RecordIndex;}//********************通用从站号及设备号得到设备记录号函数******************//	//*StationNo=站号,MachineNo=设备号	//CIM模型移植到子站后,从OPERATEEQUIPMENT表得到设备的记录号 by yys 2006/09/29	QString BCDataProcess::GetRecordIndexByMachineNo(long &hdbc,int StationNo,int MachineNo)	{	QString SqlStr;int ret=0;long result=0;QString RecordIndex="";bool bNew=0;CDataBase db;	bool bc=isConnectDatabase(hdbc,bNew);if(!bc) return "";	SqlStr.sprintf(" select recordindex from OPERATEEQUIPMENT where code=%d and stationno=%d;",MachineNo,StationNo);	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0)	{		db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return "";	}	int rowcount=db.GetRecordCount(result);	for(int i=0;i<rowcount;i++)	{		RecordIndex=db.GetFieldValue(result,i,0);break;	}	db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return RecordIndex;}//********************通用从站号及设备号得到线路编号函数******************//	//*StationNo=站号,MachineNo=设备号	//CIM模型移植到子站后,从OPERATEEQUIPMENT表得到线路编号 by yys 2006/09/29	QString BCDataProcess::GetLineNoByMachineNo(long &hdbc,int StationNo,int MachineNo)	{	QString SqlStr;int ret=0;long result=0;QString RecordIndex="";bool bNew=0;CDataBase db;	bool bc=isConnectDatabase(hdbc,bNew);if(!bc) return "";	SqlStr.sprintf(" select LineNo from OPERATEEQUIPMENT \				   where code=%d and stationno=%d;",				   MachineNo,StationNo);	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0)	{		db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return "";	}	int rowcount=db.GetRecordCount(result);	for(int i=0;i<rowcount;i++)	{		RecordIndex=db.GetFieldValue(result,i,0);break;	}	db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);	return RecordIndex;}//********************通用从站号及设备号得到线路名称函数******************//	//*StationNo=站号,MachineNo=设备号	//CIM模型移植到子站后,从LINEANDDEVICE视图得到线路名称 by yys 2006/09/29	QString BCDataProcess::GetLineNameByMachineNo(long &hdbc,int StationNo,int MachineNo)	{	QString SqlStr;int ret=0;long result=0;QString RecordIndex="";bool bNew=0;CDataBase db;	bool bc=isConnectDatabase(hdbc,bNew);if(!bc) return "";	SqlStr.sprintf(" select LineDesc from LINEANDDEVICE where DeviceNo=%d and StationNo=%d;",				   MachineNo,StationNo);	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0)	{		db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return "";	}	int rowcount=db.GetRecordCount(result);	for(int i=0;i<rowcount;i++)	{		RecordIndex=db.GetFieldValue(result,i,0);break;	}	db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return RecordIndex;}////使用记录号得到线路名称ASLINEVIEWQString BCDataProcess::GetLineName(long &hdbc,QString RecordIndex){	QString SqlStr;int ret=0;long result=0;bool bNew=0;CDataBase db;QString s1="";	bool bc=isConnectDatabase(hdbc,bNew);if(!bc) return "";	SqlStr.sprintf("Select Description from ASLINEVIEW where RecordIndex='%s';",RecordIndex.data());	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0)	{		db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return "";	}	int rowcount=db.GetRecordCount(result);	for(int i=0;i<rowcount;i++)	{		s1=db.GetFieldValue(result,i,0);break;	}	db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return s1;}//***************************************************************//*得到一个故障简报号MaxValue=65535//***************************************************************int BCDataProcess::GetNextValue(long &hdbc,QString Sequence){	CDataBase db;int ret=0;QString SqlStr="";long result=0;bool bNew=0;int FaultNum=0;	bool bc=isConnectDatabase(hdbc,bNew);if(!bc) return 0;	SqlStr.sprintf("Select nextval('%s');",Sequence.data());	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0)	{		db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return 0;	}	int rowcount=db.GetRecordCount(result);	if(rowcount<0)	{		db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return 0;	}	FaultNum=db.GetFieldValue(result,0,0).toInt();db.ClearResult(result);	if(FaultNum>=65535)	{		FaultNum=1;SqlStr.sprintf("Select setval('%s',1);",Sequence.data());ret=db.SqlSelect(hdbc,SqlStr,result);db.ClearResult(result);	}	if(bNew) db.DisConnectDataBase(hdbc);	return FaultNum;}//得到CIM模型中的PATHNAMEQString BCDataProcess::GetCimPathName(long &hdbc,int StationNo,int MachineNo){	CDataBase db;int ret=0;QString SqlStr="";long result=0;bool bNew=0;	bool bc=isConnectDatabase(hdbc,bNew);if(!bc) return "";	SqlStr.sprintf("Select PathName From OPERATEEQUIPMENT where StationNo=%d and Code=%d;",				   StationNo,MachineNo);	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0){db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return "";}	int rowcount=db.GetRecordCount(result);	QString s1="";	for(int i=0;i<rowcount;i++)	{		s1=db.GetFieldValue(result,i,0);		break;	}	db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);	return s1;}//得到CIM模型中的设备名称QString BCDataProcess::GetCimName(long &hdbc,int StationNo,int MachineNo){	CDataBase db;int ret=0;QString SqlStr="";long result=0;bool bNew=0;	bool bc=isConnectDatabase(hdbc,bNew);if(!bc) return "";	SqlStr.sprintf("Select LINKName From OPERATEEQUIPMENT where StationNo=%d and Code=%d;",				   StationNo,MachineNo);	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0){db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return "";}	int rowcount=db.GetRecordCount(result);	QString s1="";	for(int i=0;i<rowcount;i++)	{		s1=db.GetFieldValue(result,i,0);		break;	}	db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);	return s1;}////////////////////////////////得到模块下级设备列表//////////////////////////////////////ModuleName模块名称,ParentIndex==""得到一级设备,ParentIndex<>""得到设备的下级设备bool BCDataProcess::GetDevicesFromModule(long &hdbc,QString ModuleName,QString ParentIndex,DeviceInfoListType &devicelist){	CDataBase db;int ret=0;QString SqlStr="";long result=0;bool bNew=0;	bool bc=isConnectDatabase(hdbc,bNew);if(!bc) return 0;	devicelist.clear();	SqlStr.sprintf("Select A.RECORDINDEX,\				   A.TableName,\				   A.DIRECORDINDEX,\				   A.PARENTINDEX,\				   A.COMMTYPE,\				   A.USEDIP,\				   A.TIMEDIP,\				   A.REMOTECONTROL,\				   A.INTERVAL,\				   A.MACHINETYPE,\				   A.MODULNAME \				   From DEVICERELA A \				   where a.usedip=1 and a.ModulName='%s' and a.ParentIndex='%s';",ModuleName.data(),ParentIndex.data());	ret=db.SqlSelect(hdbc,SqlStr,result);	if(ret<0){db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);return 0;}	int rowcount=db.GetRecordCount(result);	st_deviceinfo st;QString s1="";	for(int i=0;i<rowcount;i++)	{		memset(&st,0x00,sizeof(st_deviceinfo));		//取出基本信息		s1=db.GetFieldValue(result,i,0);    memcpy(st.m_RecordIndex,s1.data(),40);		s1=db.GetFieldValue(result,i,1);    memcpy(st.m_TableName,s1.data(),40);		s1=db.GetFieldValue(result,i,2);    memcpy(st.m_DiRecordIndex,s1.data(),40);		s1=db.GetFieldValue(result,i,3);    memcpy(st.m_ParentIndex,s1.data(),40);		//填入设备信息		QString TableName  =db.GetFieldValue(result,i,1);		QString DiRecordIndex=db.GetFieldValue(result,i,2);		FillDeviceInfo(hdbc,TableName,DiRecordIndex,st);				//填充设备的一些信息		//填入标准的通讯参数		s1=db.GetFieldValue(result,i,4); s1=s1.toUpper();		if(s1=="TCPSERVER")			st.m_CommClass=2;		else if(s1=="TCPCLIENT")			st.m_CommClass=1;		else			st.m_CommClass=0;		FillCommunicationParam(hdbc,st.m_RecordIndex,s1,st);		//取出一般参数		s1=db.GetFieldValue(result,i,5);   st.m_UsedIp=s1.toInt();		s1=db.GetFieldValue(result,i,6);   st.m_TimedIp=s1.toInt();		s1=db.GetFieldValue(result,i,7);   st.m_Remote=s1.toInt();		s1=db.GetFieldValue(result,i,8);   st.m_Interval=s1.toInt();		s1=db.GetFieldValue(result,i,9);   memcpy(st.m_MachineType,s1.data(),40);		s1=db.GetFieldValue(result,i,10);  memcpy(st.m_ModuleName,s1.data(),40);		//根据设备号及站号得到线路表名,线路记录号,线路描述		s1=GetLineNameByMachineNo(hdbc,g_PublicClass.m_StationNo,st.m_MachineNo);memcpy(st.m_LineName,GetLineName(hdbc,s1).data(),80);		devicelist.append(st);	}	db.ClearResult(result);if(bNew) db.DisConnectDataBase(hdbc);	return true;}//填充设备信息bool BCDataProcess::FillDeviceInfo(long &hdbc,QString TableName,QString RecordIndex,st_deviceinfo &st){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -