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

📄 data_transdlg.cpp

📁 mcgs的数据导出源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Data_TransDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Data_Trans.h"
#include "Data_TransDlg.h"
#include "VirtualInfoFile.h"
//#include "resource.h"
#include "Step11.h"
#include "Step22.h"
#include "Step33.h"
#include "Set3Database.h"

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

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CData_TransDlg dialog

CData_TransDlg::CData_TransDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CData_TransDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CData_TransDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	pPageLink=NULL;
	nPageCount=0;
	nCurrentPage=0;
	m_Type = 1;
	m_pDBSave =  NULL;
	m_RemoveFirst = false;	//
	m_bFinish = false;
	m_timer = NULL;
	m_databaseType = -1;
}

void CData_TransDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CData_TransDlg)
	DDX_Control(pDX, IDC_PROGRESS1, m_ctrlprocess);
	//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CData_TransDlg, CDialog)
	//{{AFX_MSG_MAP(CData_TransDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_PREV, OnPrev)
	ON_BN_CLICKED(IDC_NEXT, OnNext)
	ON_BN_CLICKED(IDC_FINISH, OnFinish)
	ON_WM_CLOSE()
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_CANCEL, OnCancel)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CData_TransDlg message handlers

BOOL CData_TransDlg::OnInitDialog()
{
    SetWindowText(_T("生成MDB数据库"));
	CDialog::OnInitDialog();
	{	//初始化开始时间和结束时间
		CString strstartTime("2002-2-2 2:2:2");
		CString strendTime("2004-2-2 2:2:2");
		m_startTime = COleDateTime(2002,2,2,2,2,2) ;
		m_endTime = COleDateTime(2006,2,2,2,2,2) ;
		m_iDesOrder = 0;	//默认的是降序
		m_iType = -1;
//		m_startTime.ParseDateTime (strstartTime,LOCALE_NOUSEROVERRIDE);
//		m_endTime.ParseDateTime (strendTime,LOCALE_NOUSEROVERRIDE);

	}
	//获得每页显示的范围
	CRect Rect1;
	GetWindowRect(&Rect1); //获得主窗口的位置
	int nCaption = ::GetSystemMetrics(SM_CYCAPTION);
	int nXEdge = ::GetSystemMetrics(SM_CXEDGE);
	int nYEdge = ::GetSystemMetrics(SM_CYEDGE);
	CRect Rect2;
	GetDlgItem(IDC_POS)->GetWindowRect(&Rect2); //获得框架的位置
	Rect1.top=Rect1.top+nCaption+nYEdge; //相对坐标
	Rect1.left=Rect1.left+2*nXEdge;
	GetDlgItem(IDC_STATIC1)->GetWindowRect(&m_DrawRect); //获得框架的位置
	//计算机位置
	rectPage.top=Rect2.top-Rect1.top;
	rectPage.left=Rect2.left-Rect1.left;
	rectPage.bottom=Rect2.bottom-Rect1.top;
	rectPage.right=Rect2.right-Rect1.left;

	//添加要显示的页
	CStep11* pStep1 = new CStep11(this);
	CStep22* pStep2 = new CStep22(this);
	CStep33* pStep3 = new CStep33(this);
	CSet3Database* pStep4 = new CSet3Database(this);


	AddPage(pStep1, IDD_STEP1);
	AddPage(pStep2, IDD_STEP2);
	AddPage(pStep3, IDD_STEP3);
	AddPage(pStep4, IDD_SET3DATABASE_DIALOG);
	//显示第一页
	ShowPage(4);
	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}

void CData_TransDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.
void CData_TransDlg::SetWizButton(UINT uFlag)
{
	GetDlgItem(IDC_CANCEL)->EnableWindow(TRUE);
	GetDlgItem(IDC_PREV)->EnableWindow(TRUE);
	GetDlgItem(IDC_NEXT)->EnableWindow(TRUE);
	GetDlgItem(IDC_FINISH)->EnableWindow(TRUE);
	m_bFinish = false;
	switch(uFlag)
	{
	case 0: //第一步
		GetDlgItem(IDC_PREV)->EnableWindow(FALSE);
		GetDlgItem(IDC_FINISH)->EnableWindow(FALSE);
		break;
	case 1: //中间步,隐藏向下一步
		GetDlgItem(IDC_FINISH)->EnableWindow(FALSE);
		GetDlgItem(IDC_NEXT)->EnableWindow(FALSE);
		break;
	case 3:	//中间步,允许向下一步
		GetDlgItem(IDC_FINISH)->EnableWindow(FALSE);
		break;
	case 2://最后一步
		GetDlgItem(IDC_NEXT)->EnableWindow(FALSE);
		GetDlgItem(IDC_FINISH)->EnableWindow(FALSE);
		break;
	case 4:	//开始的时候
		GetDlgItem(IDC_PREV)->EnableWindow(FALSE);
		GetDlgItem(IDC_NEXT)->EnableWindow(FALSE);
		GetDlgItem(IDC_FINISH)->EnableWindow(FALSE);
		break;
	case 5:
		m_bFinish = true;
		GetDlgItem(IDC_NEXT)->EnableWindow(FALSE);
		break;
	default:

		break;
	}
}

void CData_TransDlg::OnPaint() 
{
	CPaintDC dc(this); 
	
	CBitmap BmpBack,*pOldBack; 
	BmpBack.LoadBitmap(IDB_BITMAP1); 
	
	CDC dcBack; 
	dcBack.CreateCompatibleDC(&dc); 
	pOldBack=dcBack.SelectObject(&BmpBack); 
	
	dc.BitBlt(m_DrawRect.left-5,m_DrawRect.top-21,m_DrawRect.Width(),m_DrawRect.Height(),&dcBack,0,0,SRCCOPY); 
//	DrawTransparentBitmap(&dc,IDB_BITMAPA,CRect(0,0,48,48),RGB(192,192,0)); 
	
	dcBack.SelectObject(pOldBack); 

	
	if(m_ctrlprocess.m_hWnd != NULL)
	{
		if (!m_bFinish)
			m_ctrlprocess.ShowWindow(FALSE);
		else
			m_ctrlprocess.ShowWindow(TRUE);
	}
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

void CData_TransDlg::ShowPage(UINT nPos)
{
	struct PAGELINK* pTemp=pPageLink;
	while(pTemp)
	{
		if (pTemp->nNum==nPos)
		{
			pTemp->pDialog->ShowWindow(SW_SHOW);
		}
		else
		    //不显示
			pTemp->pDialog->ShowWindow(SW_HIDE);
		pTemp=pTemp->Next;
	}
	if (nPos>=nPageCount)  //最后一页
	{
		nCurrentPage=nPageCount;
		SetWizButton(2);
		return;
	}
	if (nPos<=1) //首页 
	{
		nCurrentPage=1;
		SetWizButton(4);
		return;
	}
	//中间步
	SetWizButton(1);
}


void CData_TransDlg::AddPage(CDialog* pDialog, UINT nID)
{
	struct PAGELINK* pTemp = pPageLink;
	//插入新生成的结点
	struct PAGELINK* pNewPage = new PAGELINK;
	pNewPage->pDialog = pDialog;
	pNewPage->pDialog->Create(nID,this);
	
	// Is window created
	ASSERT(::IsWindow(pNewPage->pDialog->m_hWnd));
    // 检查每页的样式
	DWORD dwStyle = pNewPage->pDialog->GetStyle();
	ASSERT((dwStyle & WS_CHILD) != 0); //子窗体
	ASSERT((dwStyle & WS_BORDER) == 0); //无边界
	//显示
	pNewPage->pDialog->ShowWindow(SW_HIDE);
	pNewPage->pDialog->MoveWindow(rectPage);
	/*pNewPage->pDialog->SetWindowPos(&CWnd::wndTop,
		rectPage.left,rectPage.top,
		rectPage.Width(),rectPage.Height(),
		SWP_NOMOVE);*/
	pNewPage->Next=NULL;
	pNewPage->nNum=++nPageCount; //计数器加1
	if (pTemp)
	{
		while (pTemp->Next) pTemp=pTemp->Next; //移动链表末尾
		pTemp->Next=pNewPage;

	}
	else
		pPageLink=pNewPage; //若是第一个接点
}



void CData_TransDlg::OnCancel() 
{
	// TODO: Add your control notification handler code here
	CDialog::OnCancel();	
}

void CData_TransDlg::OnPrev() 
{
	// TODO: Add your control notification handler code here
	
	switch(m_Type)
	{
	case 0:
		--nCurrentPage;
		break;
	case 1:
		--nCurrentPage;
		break;
	case 2:
		if (nCurrentPage == 2)
			nCurrentPage=1;
		else
		nCurrentPage = 2;
		break;
	}
	ShowPage(nCurrentPage);	
}

void CData_TransDlg::OnNext() 
{
	// TODO: Add your control notification handler code here

	switch(m_Type)
	{
	case 0:
		ASSERT(FALSE);
		++nCurrentPage;
		break;
	case 1:
		++nCurrentPage;
		break;
	case 2:
		nCurrentPage = 4;
		break;
	}
	ShowPage(nCurrentPage);	
}

void CData_TransDlg::OnFinish() 
{
	// TODO: Add your control notification handler code here
	//进行数据库的测试
	
	OnPaint();	
	//设置进度条
	m_ctrlprocess.SetRange(0,100);
	m_ctrlprocess.SetPos(0);

	switch(m_iType)	//转换类型
	{
	case 0:	//转换成文本文件
		{
			struct PAGELINK* pTemp=pPageLink;
			while(pTemp)
			{
				if (pTemp->nNum==nCurrentPage)
				{
					pTemp->pDialog->ShowWindow(SW_SHOW);
					//先进行测试
					if (((CStep33*)pTemp->pDialog)->SvrSetPar()!=0)
					{
						return ;
					}
					break;
				}
				pTemp=pTemp->Next;
			}

		}
		break;
		//进行读取数据
		break;
	case 1:	//转换成数据库文件
		{
			struct PAGELINK* pTemp=pPageLink;
			while(pTemp)
			{
				if (pTemp->nNum==nCurrentPage)
				{
					pTemp->pDialog->ShowWindow(SW_SHOW);
					//先进行测试
					if (((CSet3Database*)pTemp->pDialog)->SvrConnectDatabase()!=0)
					{
						m_ctrlprocess.ShowWindow(FALSE);
						return ;
					}
				}
				pTemp=pTemp->Next;
			}

		}
		break;
	default:
		return ;
	}
	m_iStep = 0;
	if (m_timer != NULL)
	{
		KillTimer(m_timer);
	}
	m_timer = SetTimer(1,500,NULL);
	int iRet = SvrFecthData(m_strDataName,m_startTime,m_endTime,m_iType);
	if (iRet>=0)
	{
		AfxMessageBox("convert success!");
	}
	else	if (iRet==-1)
	{
			m_ctrlprocess.SetPos(100);	
	}
	if (m_timer != NULL)
	{
		KillTimer(m_timer);
		m_timer = NULL;			
	}
	
}

BOOL CData_TransDlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
		CDialog::OnDestroy();
	// TODO: Add your message handler code here
	//依次消除每页
	struct PAGELINK* pTemp = pPageLink;
	while(pTemp)
	{
		struct PAGELINK* pNextTemp = pTemp->Next;
		pTemp->pDialog->DestroyWindow();
		delete pTemp->pDialog;
		delete pTemp;
		pTemp = pNextTemp;
	}
	return CDialog::DestroyWindow();
}

void CData_TransDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	CDialog::OnClose();
}	

void CData_TransDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	//依次消除每页
/*	struct PAGELINK* pTemp = pPageLink;
	while(pTemp)
	{
		struct PAGELINK* pNextTemp = pTemp->Next;
		pTemp->pDialog->DestroyWindow();
		delete pTemp->pDialog;
		delete pTemp;
		pTemp = pNextTemp;
	}*/
	
	for (int i=0;i<m_arrayInfoFile.GetSize();++i)
	{
		delete m_arrayInfoFile[i];
	}
	
	POSITION pos = m_TableDef.GetStartPosition();
	while (NULL != pos)
	{
		TABLESTRUCT* pDef = NULL;
		CString  str;
		m_TableDef.GetNextAssoc(pos,str,pDef);
		ASSERT(pDef != NULL);
		if (pDef != NULL)
		{
			delete pDef;
		}
	}
	m_TableDef.RemoveAll();

	pos = m_pTableDef.GetStartPosition();
	while (NULL != pos)
	{
		CDaoTableDef* pDef = NULL;
		CString  str;
		m_pTableDef.GetNextAssoc(pos,str,pDef);
		ASSERT(pDef != NULL);
		if (pDef != NULL)
		{
			delete pDef;
		}
	}
	m_pTableDef.RemoveAll();
	if (m_pDBSave!=NULL)
	{
		if (m_pDBSave->IsOpen())
		{
			m_pDBSave->Close();
		}
		delete m_pDBSave;
	}
}

//读取对应的对象的历史数据
//1。历史数据对象名称,2。读取数据的开始时间,3。结束时间,4.转换程序的类型0:文本文件
//返回值>=0表示读取数据成功,小于0表示失败
int CData_TransDlg::SvrFecthData(CString DataName ,COleDateTime  &startTime,\
								 COleDateTime  &endTime,int iType)
{
	if (startTime > endTime)
	{
		return -1;
	}
	for (int iPos=0;iPos<m_arrayInfoFile.GetSize();++iPos)
	{
		if (DataName.CompareNoCase(m_arrayInfoFile[iPos]->SvrGetFileName()) == 0)
			break;
	}
	COleDateTime timeBegin,timeEnd,tmpTime;
	switch(iType)
	{
	case 0:	//转换成文本文件
		//进行读取数据
		{
			//penghong add
			CFile file;
			if (!file.Open(m_strFileName , CFile::modeWrite|CFile::modeCreate))
			{
				
				return -4;
			}
			file.Close();
		}
		break;
	case 1:	//转换成数据库文件
		if(m_iDesOrder == 0)
		{
			tmpTime  = startTime;
		}
		else
		{
			tmpTime  = endTime;		
		}
		if (mfQueryFromDatabase(iPos,DataName,tmpTime)<0)
		{
			AfxMessageBox("ensure the database connected?");
		}
		if(m_iDesOrder == 0)
		{
			startTime = tmpTime;
		}
		else
		{
			endTime = tmpTime;
		}
		break;
	default:
		return -2;
	}

	
	//定义一个保存查询数据的数组
	CArray<CList<COleVariant,COleVariant>*,CList<COleVariant,COleVariant>*> listValueBuffer;
	if (ARRAYSIZE ( m_strArray[iPos] )<=0)
	{
		return -5;
	}
	
	listValueBuffer.SetSize (ARRAYSIZE ( m_strArray[iPos] ) +2);
	
	WORD wOld = CVirtualInfoFile::m_wInvRead;
	CVirtualInfoFile::EXSTATUS exOld = CVirtualInfoFile::m_exStatus;
	long iTotalOld = CVirtualInfoFile::m_iTotalReadRecords;
	long iRequiredRecordsOld = CVirtualInfoFile::m_iRequiredRecords;
	
	//计算装载的时间起点和装载的记录数目
	int m_iRequiredRecords = 512;	//256条是目前默认的条数
	CVirtualInfoFile::m_exStatus = CVirtualInfoFile::MCGS_FORSAVEDATA;
	CVirtualInfoFile::m_iTotalReadRecords = 0;
	CVirtualInfoFile::m_iRequiredRecords = m_iRequiredRecords;

	timeBegin = startTime;
	timeEnd = endTime;
	int iSumNun=0;
	//remain old values
	while(TRUE)
	{
		
		for (int i = 0; i < ARRAYSIZE ( listValueBuffer); i++ )	//分配保存的空间
		{
			listValueBuffer[i] = new CList<COleVariant,COleVariant>;
		}
		
		if (m_iDesOrder == 0)		
		{
			CVirtualInfoFile::m_wInvRead = MCGS_READDATA_O2N | MCGS_READDATA_ASC;
		}
		else	//降序
		{
			CVirtualInfoFile::m_wInvRead = MCGS_READDATA_N2O | MCGS_READDATA_DEC;
		}		

		//			timeEnd = timeEnd > m_tIniEndTime ? m_tIniEndTime : timeEnd;
		//此函数应当是一个安全函数,但是主要有一些变量没有弄成线程安全型,如CVirtualInfoFile::m_wInvRead等静态变量
		m_arrayInfoFile[iPos]->SvrGetDBDataEx( DataName, m_strArray[iPos], timeBegin, timeEnd, listValueBuffer);
		if (listValueBuffer[0]->GetCount()<m_iRequiredRecords)
		{
			if (m_iStep+30<100 )
				m_iStep += 30;
		}
		else

⌨️ 快捷键说明

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