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

📄 mydb.cpp

📁 电压监测后台管理程序,数据是通过GPRS传到因特网的
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// myDb.cpp : implementation file
//

#include "stdafx.h"
#include "rectvinfo.h"

#include "myDb.h"

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

/////////////////////////////////////////////////////////////////////////////
// myDb
CRectvinfoApp* theDbApp;

IMPLEMENT_DYNCREATE(myDb, CWinThread)

myDb::myDb()
{
	theDbApp = (CRectvinfoApp*)AfxGetApp();

	Init_DB();
}

myDb::~myDb()
{
}

BOOL myDb::InitInstance()
{
	// TODO:  perform and per-thread initialization here

	return TRUE;
}

int myDb::ExitInstance()
{
	// TODO:  perform any per-thread cleanup here

	return CWinThread::ExitInstance();
}


BEGIN_MESSAGE_MAP(myDb, CWinThread)
	//{{AFX_MSG_MAP(myDb)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// myDb message handlers

int myDb::Run() 
{
	// TODO: Add your specialized code here and/or call the base class
	MSG msg;
	unsigned char *buff;

	while (Loop)
	{
		if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
		{
			if(msg.hwnd != 0)
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
				continue;
			}

			switch(msg.message)
			{
			case TIMECONNECTDB:
				OnTimerConnectDB();
				break;
			case SAVEDATA:
				buff = (unsigned char *)msg.lParam;
				switch (buff[3])
				{
				case 1:			//本月日统计
				case 4:
//					SaveDayData(buff);
//					break;
				case 2:			//上月日统计
				case 5:
					SaveDayData(buff);
					break;
				case 3:			//月统计数据
					SaveMonthData(buff);
					break;
				case 6:			//掉电数据
					SavePowerOff(buff);
					break;
				case 7:			//实时电压数据
					SaveCurrentVoltage(buff);
					break;
				case 0x0d:			//实时时钟
					break;
				case 0x0e:			//仪器参数
					SaveMeterParameter(buff);
					break;
				case 0x2f:			//典型日数据
					SaveTypeData(buff);
					break;
				default:
					break;
				}
				delete buff;
				break;
			default:
				break;
			}
		}
		Sleep(2);
	}

	return CWinThread::Run();
}

BOOL myDb::Init_Hdbc()
{
    if(SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv)!=SQL_SUCCESS)
	{
		return FALSE;
	}
	// Let ODBC know this is an ODBC 3.0 application.
    if(SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER)!=SQL_SUCCESS)return FALSE;

    if(SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc)!=SQL_SUCCESS)
	{
		//MessageBox(NULL,"ODBC分配HDBC出错",NULL,MB_OK);
		return FALSE;
	}

	return TRUE;
}

BOOL myDb::Init_Hstmt()
{
	if(hstmt)
	{
		SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
		hstmt = NULL;
	}
	rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	if(rc!=SQL_SUCCESS && rc!=SQL_SUCCESS_WITH_INFO)
	{
		return FALSE;
	} 

	rc=SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)1, 0);
	rc=SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_STATUS_PTR, &RowStatusArray, 0);
	rc=SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &crow, 0);	
	rc=SQLSetStmtOption(hstmt,SQL_ASYNC_ENABLE,0);

	return TRUE;
}

BOOL myDb::IsConnectDB()
{
//	UCHAR	szsysdate[16];
//	SQLINTEGER cbsysdate;

	sprintf((char *)select,"SELECT * From poweroff_record where meter_number = '9999'");
	rc=SQLExecDirect(hstmt,select,SQL_NTS);
	if(rc!=SQL_SUCCESS && rc!=SQL_SUCCESS_WITH_INFO)
	{
		SQLCloseCursor(hstmt);
		return FALSE;
	}	
//	SQLBindCol(hstmt,1,SQL_C_CHAR,&szsysdate,5,&cbsysdate);		
//	rc = SQLFetch(hstmt);
	
	SQLFreeStmt(hstmt,SQL_UNBIND);
	SQLCloseCursor(hstmt);

	return TRUE;
}

BOOL myDb::OnReConnectDB()
{
	UCHAR server[20];
	UCHAR uid[20];
	UCHAR pwd[20];


	EnterCriticalSection(theDbApp->GetCritical());

	Restore_Hdbc();

	if(Init_Hdbc())
	{
/*		theDbApp->GetDbs((char*) server);
		theDbApp->GetDbn((char*) uid);
		theDbApp->GetDbp((char*) pwd);*/
		strcpy((char*) server,"vot");
		strcpy((char*) uid,"jcm");
		strcpy((char*) pwd,"jcm");

		rc=SQLConnect(hdbc,server,SQL_NTS,uid,SQL_NTS,pwd,SQL_NTS);
		if((rc == SQL_SUCCESS) || (rc ==SQL_SUCCESS_WITH_INFO))
		{				
			if(Init_Hstmt())
			{
				DBConnectFlag = TRUE;
				LeaveCriticalSection(theDbApp->GetCritical());	
				return TRUE;
			}
		}
	}

	LeaveCriticalSection(theDbApp->GetCritical());	

	return FALSE;
}

BOOL myDb::OnTimerConnectDB()
{
	UCHAR * ScreenMessage;

	if(!DBConnectFlag)
	{
		if(OnReConnectDB())
		{
			ScreenMessage = new UCHAR[16];
			strcpy((char*)ScreenMessage,"数据库重连成功!");
			::PostMessage(theDbApp->formWnd,ADDLISTDB,WPARAM(0),LPARAM(ScreenMessage));
		}
	}
	else if(!IsConnectDB())
	{
		DBConnectFlag = FALSE;
		ScreenMessage = new UCHAR[12];
		strcpy((char*)ScreenMessage,"数据库断开!");
		::PostMessage(theDbApp->formWnd,ADDLISTDB,WPARAM(0),LPARAM(ScreenMessage));
	}

/*	unsigned char tc[100];
	char id[5];
	id[0] = '0';
	id[1] = '1';
	id[2] = '2';
	id[3] = '3';
	id[4] = '\0';

	tc[0] = 0;
	tc[1] = 0;
	tc[2] = 5;
	tc[3] = '0';
	tc[4] = '1';
	tc[5] = 0;
	tc[6] = 0x22;
	tc[7] = 0x33;
	tc[8] = 0x02;
	tc[9] = 0x20;
	tc[10] = 0x02;
	tc[11] = 0x35;
	tc[12] = 0x02;
	tc[13] = 0x05;
	tc[14] = 0x12;
	tc[15] = 0x34;
	tc[16] = 0;
	tc[17] = 5;
	tc[18] = 0x13;
	tc[19] = 0x88;
	tc[20] = 211;
	tc[21] = 22;
	tc[22] = 33;
	tc[23] = 44;
	tc[24] = 0;
	tc[25] = 0;
	tc[26] = 0;
	tc[27] = 0;
	tc[28] = 0x12;
	tc[29] = 0x23;

	tc[30] = 0x59;
	tc[31] = 0x59;
	tc[32] = 0x5;
	tc[33] = 0x15;
	tc[34] = 0x25;
	tc[35] = 0x29;
	tc[36] = 0x01;
	tc[37] = 0x30;
	tc[38] = 0x01;
	tc[39] = 0x31;

	tc[40] = 0x01;
	tc[41] = 0x32;
	tc[42] = 0x01;
	tc[43] = 0x33;
	tc[44] = 0x01;
	tc[45] = 0x34;
	tc[46] = 0x01;
	tc[47] = 0x35;
	tc[48] = 0x01;
	tc[49] = 0x36;

	tc[50] = 0x01;
	tc[51] = 0x37;
	tc[52] = 0x01;
	tc[53] = 0x38;
	tc[54] = 0x01;
	tc[55] = 0x39;
	tc[56] = 0x01;
	tc[57] = 0x40;
	tc[58] = 0x01;
	tc[59] = 0x41;
*/
//	ReadMonthData(tc,id,5);
//	ReadMeterParameter(tc);
	return TRUE;
}

BOOL myDb::Init_DB()
{
	UCHAR * ScreenMessage;
//	int i;

	Loop = TRUE;
	DBConnectFlag = false;

/*	for(i = 0; i < ROWS; i++)
	{
		m_checkptr[i] = NULL;
	}
*/
	henv = NULL;
	hdbc = NULL;
	hstmt = NULL;

	if(OnReConnectDB())
	{
		ScreenMessage = new UCHAR[16];
		strcpy((char*)ScreenMessage,"数据库连接成功!");
		::PostMessage(theDbApp->formWnd,ADDLISTDB,WPARAM(0),LPARAM(ScreenMessage));
	}
	else
	{
		ScreenMessage = new UCHAR[16];
		strcpy((char*)ScreenMessage,"数据库连接失败!");
		::PostMessage(theDbApp->formWnd,ADDLISTDB,WPARAM(0),LPARAM(ScreenMessage));
	}

	return TRUE;
}

BOOL myDb::Close_DB()
{
/*	if(BoxMessagePtr)
		delete BoxMessagePtr;
	if(ptrUidPwd)  	
		delete ptrUidPwd;
*/
	Restore_Hdbc();

	return TRUE;
}

BOOL myDb::Restore_Hdbc()
{	
	if( hstmt != NULL )
	{
		SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
		hstmt = NULL;
	}

	if( hdbc != NULL )
	{
		SQLDisconnect(hdbc);
		SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
		hdbc = NULL;
	}

    if( henv != NULL) 
	{
		SQLFreeHandle(SQL_HANDLE_ENV, henv);
		henv = NULL;
	}

	return TRUE;
}

⌨️ 快捷键说明

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