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