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

📄 datarecord.cpp

📁 电子监控的网络编程实例
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// DataRecord.cpp: implementation of the CDataRecord class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MainFrm.h"
#include "DataRecord.h"
#include <stdio.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDataRecord::CDataRecord()
{
	pConn = NULL;
	pRst = NULL;
	pConn = new CADOConnection();
	if(!pConn)
	{
//		ReStartWindows();
		return;
	}

	pRst= new CADODataset();
	if(!pRst)
	{
//		ReStartWindows();
		return;
	}

	GetCurrentDisk();
	m_strHardDisk="C:\\";
	int iDriver = GetDrives(m_strHardDisk);		
}

CDataRecord::~CDataRecord()
{
	try{
		if(pRst->IsOpen()) pRst->Close();
		delete pRst;
		if(pConn->IsOpen()) pConn->Close();	
		delete pConn;

		
	}catch(...){
		WriteLog("释放Record.mdb资源异常",0);
	}

}

CString CDataRecord::GetCurrentDisk()
{
	
	return m_strDisk;
}

void CDataRecord::SaveCurrentDisk()
{
//	WritePrivateProfileString("system","CurDisk",m_strDisk,CString(CfgDir)+CString(MainCfgFile));
}

//找到有空间的数据盘//-1表示没有找到//则需要执行
char CDataRecord::PrepareDisk(BYTE& iMaxNum, BYTE iMaxTry)
{
	iMaxNum++;
	CString FirstPath=m_strDisk+"\\"+RecordSavePath;
	BOOL bResult;
	ULARGE_INTEGER i64FreeBytes;
	ULARGE_INTEGER i64TotalBytes;
	ULARGE_INTEGER i64NumFreeBytes;
	
	CString sDrives=m_strHardDisk;
	TCHAR pDIR[3];	
	int len = sDrives.GetLength();
//	if (len<6) return -1; //没有其他磁盘
	for(int i=3;i<len;i+=3)
	{
		pDIR[0] = sDrives.GetAt(i);
		pDIR[1] = ':';                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
		pDIR[2] = '\0';
		CString strDisk = pDIR;
        
		if(GetFileAttributes(strDisk+"\\"+RecordSavePath)!=FILE_ATTRIBUTE_DIRECTORY){
			CreateDirectory(strDisk+"\\"+RecordSavePath,NULL);
		}		
		
		bResult = ::GetDiskFreeSpaceEx(strDisk,&i64FreeBytes,&i64TotalBytes,&i64NumFreeBytes);
		if (bResult)
		{	
			if ((i64NumFreeBytes.u.LowPart > MaxFreeDisk || i64NumFreeBytes.u.HighPart > 0)) 
			{
				FirstPath = strDisk+"\\"+RecordSavePath;				
				m_strDisk = strDisk;
				SaveCurrentDisk();
				return (i/3);	
			}
			
		}
	}
	DeleteFirstMonthDisk();	
	if(iMaxNum<iMaxTry+1)
	{
		return PrepareDisk(iMaxNum);
	}
	else
	{
		return -1;
	}
	return 0;
}

int CDataRecord::GetDrives(CString &sDrives)
{ //枚举本机硬盘驱动名 
	sDrives = "";
	int nPos = 0;
	int nDrives = 0;
	CString str = _T("?:\\"); 	
	DWORD dwDriveList = ::GetLogicalDrives();
	while (dwDriveList) {
		if (dwDriveList & 1) {
			str.SetAt(0,_T('A') + nPos);
			if (::GetDriveType(str)==DRIVE_FIXED) {
				sDrives += str;
				nDrives ++;
			}
		}
		nPos ++;
		dwDriveList >>= 1;
	}
	if(nDrives<3)
	{
		WriteLog("系统没有数据盘",2);
//		ReStartWindows();
	}

	return nDrives;//结果: C:\D:\E:\ ...
}

char CDataRecord::DeleteFirstMonthDisk()
{
	CString bmpFile;
	CString FilePath="";
	   try{
		   if(pRst->IsOpen())
			   pRst->Close();
		   pRst->SetConnection(pConn);
		   BOOL bRst=pRst->Open("select bmp from record where wzsj=(select min(wzsj) from record)",CADODataset::openQuery);
		   if(bRst)
		   {			   
			   if (!pRst->IsEof()) {
				   pRst->GetFieldValue("bmp",bmpFile);		
				   int iPos;
				   iPos=bmpFile.Find(",");
				   bmpFile=bmpFile.Left(iPos);
				   iPos=-1;
				   for(int i=0;i<bmpFile.GetLength();i++){
					   if (bmpFile.GetAt(i)=='\\') {
						   iPos=i;
						   FilePath=bmpFile.Right(iPos);//带目录"\\"
					   }
				   }
				   pRst->Close();
			   }
			     
		   }
		   else
			   return(-1);
	   }catch(...){
		   WriteLog("查询纪录数据库失败!",1);
		   return(-1);
	   }
	      
		
	   if (FilePath.GetLength()>0) {
		   DeleteDirs(FilePath);
		   try{
			   CString s;
			   s.Format("DELETE FROM record WHERE bmp like '%s*'",FilePath);
			   pConn->Execute(LPCTSTR(s));
		   }catch(...){
			   WriteLog("删除前10万条纪录失败",2);			   
			   return -2;
		   }
	   }

	return 0;
}

char CDataRecord::DeleteDirs(CString strPath)
{
	CString sDrives=m_strHardDisk;

	int len = sDrives.GetLength();
//	if (len<6) return -1; //没有其他磁盘
	TCHAR pDir[3];
	CString FileName;	
	try
	{
		WIN32_FIND_DATA fd;
		//统一根目录最末尾不含'\'
		if(strPath.Right(1) != "\\")
			strPath=strPath+"\\";
		CString strFind=strPath+"*.*";
		
		HANDLE hd=FindFirstFile(strFind,&fd);
		if (hd==INVALID_HANDLE_VALUE) 
			return -2;//没有找到目录
		else
		{
			CString str=fd.cFileName;
			if ((str==".") || (str==".."))
				goto nnext;
			FileName=strPath+fd.cFileName;
			if(GetFileAttributes(FileName)!=FILE_ATTRIBUTE_DIRECTORY)
				goto nnext;

			if(str.GetLength()>2)
			{
			
				SHFILEOPSTRUCT fo;
				memset(&fo,0,sizeof(fo));
				fo.fAnyOperationsAborted=FALSE;
				fo.fFlags=FOF_NOCONFIRMATION|FOF_NOERRORUI;
				fo.lpszProgressTitle="";
				CString de=FileName+'\0';
				fo.pFrom=LPCTSTR(de);
				fo.wFunc=FO_DELETE;
				SHFileOperation(&fo);
				
			}
nnext:		while(FindNextFile(hd,&fd))
			{
				CString str=fd.cFileName;
				if ((str==".") || (str==".."))
					continue;
				FileName=strPath+fd.cFileName;
				if(GetFileAttributes(FileName)!=FILE_ATTRIBUTE_DIRECTORY)
					continue;

				if(str.GetLength()>2)
				{
					
						SHFILEOPSTRUCT fo;
						memset(&fo,0,sizeof(fo));
						fo.fAnyOperationsAborted=FALSE;
						fo.fFlags=FOF_NOCONFIRMATION|FOF_NOERRORUI;
						fo.lpszProgressTitle="";
						CString de=FileName+'\0';
						fo.pFrom=LPCTSTR(de);
						fo.wFunc=FO_DELETE;
						SHFileOperation(&fo);
				
				}
			}
		} //End of while (NotEndofCurDir)
	}
	catch (...) {
		return -3;//查找文件异常
	}

	return 0;
}

char CDataRecord::CreateRecordDB()
{
	CString dbName;
	dbName=CString(CfgDir)+CString(RecordDatabase);
	
	CString ss,sDir;
	TCHAR pDIR[3];	
	int len = m_strHardDisk.GetLength();
	if (len<3) return -1; //没有其他磁盘
	for(int i=0;i<len;i+=3)
	{
		pDIR[0] = m_strHardDisk.GetAt(i);
		pDIR[1] = ':';
		pDIR[2] = '\0';
		ss = pDIR;
		sDir = ss+"\\"+CString(RecordSavePath);
		ss = sDir+CString(RecordDatabase);

		try
		{
			DeleteFile(ss);
		}
		catch(...)
		{
		}
		
		DWORD DirFlag=GetFileAttributes(sDir);
		switch(DirFlag) {
		case FILE_ATTRIBUTE_DIRECTORY:
			break;
		default:
			try
			{
				DeleteFile(sDir);
			}
			catch(...)
			{
			}
			if (!CreateDirectory(sDir,NULL))
				return(-5); //-5
			break;
		}
	}
	

	try{
		if(pConn->IsOpen())
			pConn->Close();
		BOOL bRst=FALSE;
		bRst = pConn->CreateAccessMDB(dbName);
		if(!bRst)
			throw 0;
		
		bRst = pConn->ConDB(dbName);
		if(!bRst)
			throw 0;
		
		CString sql=CString("create table record( ")+
			CString(" XZQYDM char(6) ,")+
			CString(" JQBH char(2) ,")+
			CString(" XH AUTOINCREMENT ,")+
			CString(" WZSJ Datetime,			   ")+
			CString(" WZDD varchar(30),			   ")+
			CString(" XLSD integer,			   ")+
			CString(" MBSD integer,			   ")+
			CString(" ZKSD integer,			   ")+
			CString(" SDSD integer,			   ")+
			CString(" XZSD integer,			   ")+
			CString(" WZBH varchar(6),			   ")+
			CString(" HPHM varchar(12),			   ")+
			CString(" bmp text,			       ")+
			CString(" CLLX varchar(3),			       ")+
			CString(" CLBJ varchar(1),			       ")+
			CString(" XSFX integer,			       ")+
			CString(" JSZH varchar(18),			       ")+
			CString(" JKWZBH varchar(22),			       ")+
			CString(" SPBJ varchar(1),			       ")+
			CString(" CLRQ DateTime,			       ")+
			CString(" ZDJC varchar(1),			       ")+
			CString(" HPTP text,			       ")+
			CString(" HPZL varchar(2),			       ")+
			CString(" DEAL varchar(1),			       ")+
			CString(" ZPXH long,			       ")+
			CString(" XCXS integer,			       ")+
			CString(" DSXZ integer,			       ")+
			CString(" HPYS BYTE,			       ")+
			CString(" SDCS varchar(1),			       ")+
			CString(" CLYS varchar(4),			       ")+
			CString(" XYHP text	,		       ")+
			CString(" primary key(XZQYDM,JQBH,XH) ") +
			CString(" )							");
		
		bRst = pConn->Execute(sql);
		if(!bRst)
			throw 0;

		sql=CString("create table HPZL( ")+
			CString(" HPZL varchar(2) primary key,			   ")+
			CString(" ZLMS varchar(50)			   ")+
			CString(")							   ");
		
		bRst = pConn->Execute(sql);		
		if(!bRst)
			throw 0;
		CStdioFile pTxtFile;
		if(pTxtFile.Open(".\\HPZL.dat",CFile::modeRead | CFile::typeText))
		{
			while(pTxtFile.GetPosition()<pTxtFile.GetLength())
			{
				pTxtFile.ReadString(sql);
				bRst = pConn->Execute(sql);	
			}
				pTxtFile.Close();
		}

		
		sql=CString("create table CLLX( ")+
			CString(" CLLX varchar(3) primary key,			   ")+
			CString(" LXMS varchar(20)			   ")+
			CString(")							   ");
		
		bRst = pConn->Execute(sql);		
		if(!bRst)
			throw 0;
		pTxtFile;
		if(pTxtFile.Open(".\\CLLX.dat",CFile::modeRead | CFile::typeText))
		{
			while(pTxtFile.GetPosition()<pTxtFile.GetLength())
			{
				pTxtFile.ReadString(sql);
				bRst = pConn->Execute(sql);	
			}
			pTxtFile.Close();
		}

		sql=CString("create table DLBM( ")+
			CString(" DLBM varchar(10) primary key,			   ")+
			CString(" DLMC varchar(255)			   ")+

⌨️ 快捷键说明

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