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