📄 ysdataprocess.cpp
字号:
//#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 + -