📄 datafuncold.h
字号:
iott_value[count].io_length = numberfilewz[account-48].length;
ling_flag=1;
}
count++;
switch (length-count_position) {
case 2:
if((account<=48)||(account>57)){
iott_value[count].io_offset = 0;
iott_value[count].io_length = 0;
zero_jiao = 1;
}
else
{
zero_jiao = 0;
iott_value[count].io_offset = JIAO_OFFSET;
iott_value[count].io_length = JIAO_LENGTH;
}
break;
case 1:
if((account<=48)||(account>57)){
if((zero_yuan==1)&&(zero_jiao==1)) {
iott_value[count].io_offset = numberfilewz[0].offset ;
iott_value[count].io_length = numberfilewz[0].length ;
}
else
{
iott_value[count].io_offset = 0;
iott_value[count].io_length = 0;
}
}
else
{
iott_value[count].io_offset = FEN_OFFSET;
iott_value[count].io_length = FEN_LENGTH;
}
break;
}
count++;
count_position++;
}
for(count_tmp=0;count_tmp<count;count_tmp++){
iott_value[count_tmp].io_type = IO_DEV|IO_LINK;
iott_value[count_tmp].io_nextp = &iott_value[count_tmp+1];
iott_value[count_tmp].io_fhandle=szfile[filenum].filehandle;
iott_value[count_tmp].io_bufp = 0;
}
iott_value[count-1].io_type = IO_DEV|IO_EOT;
iott_value[count-1].io_nextp = NULL;
return(count);
}
/***************************************************************
* 名称:UINT DataConnect(LPVOID pParam)
* 功能:校验数据库连接并自动处理的线程函数
***************************************************************/
UINT DataConnect(LPVOID pParam)
{
int channum;
TCB * tcb;
CDatabase ls_database;
while(1){
::WaitForSingleObject(JiaoYan.m_hObject, INFINITE);
tcb=(TCB *)pParam;
channum=tcb->chdevno;
if(stopdata==STOPTRUE){
//AfxMessageBox("Stop the dataconnect thread");
break;
}
//if((dba_connect==DBA_TRUE)&&(dbawrite_connect==DBA_TRUE)&&(cjdata_flag==CJDATA_YES)){
if((dba_connect==DBA_TRUE)&&(cjdata_flag==CJDATA_YES)){
continue;
}
//if((dba_connect==DBA_FALSE)||(dbawrite_connect==DBA_FALSE)) {
if(dba_connect==DBA_FALSE){
try{
if(ls_database.Open( _T( "XTCJ170" ), FALSE, FALSE, _T( "ODBC;UID=xt170;PWD=VCplus170" ))==FALSE){
TRACE("连接数据库失败");
//dba_connect=DBA_FALSE;
continue;
}
}
catch(CDBException* pEx)
{
TRACE("连接数据库失败");
//dba_connect=DBA_FALSE;
pEx->Delete();
continue;
}
catch(CMemoryException* pEx)
{
TRACE("连接数据库失败");
//dba_connect=DBA_FALSE;
pEx->Delete();
continue;
}
ls_database.Close();
//if(dba_connect==DBA_FALSE){
//sLock.Lock();
if(pDatabase.IsOpen())
pDatabase.Close();
cjdata_flag=CJDATA_NO;
try{
if(pDatabase.Open( _T( "XTCJ170" ), FALSE, FALSE, _T( "ODBC;UID=xt170;PWD=VCplus170" ))==FALSE){
TRACE("连接数据库失败");
dba_connect=DBA_FALSE;
//continue;
}
else{
dba_connect=DBA_TRUE;
}
}
catch(CDBException* pEx)
{
TRACE("连接数据库失败");
dba_connect=DBA_FALSE;
pEx->Delete();
//continue;
}
catch(CMemoryException* pEx)
{
TRACE("连接数据库失败");
dba_connect=DBA_FALSE;
pEx->Delete();
//continue;
}
//sLock.Unlock();
//pCuijiaoSet.Close();
//}
/*if(dbawrite_connect==DBA_FALSE){
sWritelock.Lock();
if(pWritebase.IsOpen())
pWritebase.Close();
try{
if(pWritebase.Open( _T( "XTCJ170" ), FALSE, FALSE, _T( "ODBC;UID=xt170;PWD=VCplus170" ))==FALSE){
TRACE("连接数据库失败");
dbawrite_connect=DBA_FALSE;
//continue;
}
else{
dbawrite_connect=DBA_TRUE;
}
}
catch(CDBException* pEx)
{
TRACE("连接数据库失败");
dbawrite_connect=DBA_FALSE;
pEx->Delete();
//continue;
}
catch(CMemoryException* pEx)
{
TRACE("连接数据库失败");
dbawrite_connect=DBA_FALSE;
pEx->Delete();
//continue;
}
sWritelock.Unlock();
}*/
}
if((cjdata_flag==CJDATA_NO)&&(dba_connect==DBA_TRUE)){
//sLock.Lock();
if(pCuijiaoSet.IsOpen())
pCuijiaoSet.Close();
try{
if(pCuijiaoSet.Open( CRecordset::forwardOnly , _T(cuijiaoSQL))==0){
pCuijiaoSet.Close();
cjdata_flag=CJDATA_NO;
//continue;
}
else{
if(pCuijiaoSet.GetRecordCount()==0){
pCuijiaoSet.Close();
cjdata_flag=CJDATA_NO;
}
else{
pCuijiaoSet.Move(lcuijiaocurrent);
cjdata_flag=CJDATA_YES;
}
}
}
catch(CDBException* e){
dba_connect=DBA_FALSE;
cjdata_flag=CJDATA_NO;
e->Delete();
//continue;
}
catch(CMemoryException* e){
dba_connect=DBA_FALSE;
cjdata_flag=CJDATA_NO;
e->Delete();
//continue;
}
//sLock.Unlock();
}
}
return (0);
}
/***************************************************************
* 名称:UINT RecordData(LPVOID pParam)
* 功能:记录数据库日志
***************************************************************/
UINT RecordData(LPVOID pParam)
{
int channel;
TCB * tcb;
char InsertSQL[INSERTSQL_LENGTH];
char UpdateSQL[UPDATESQL_LENGTH];
//CMydatabase* lpWritedata; //指向写数据库的指针
//CMutex* lpWritemutex; //指向写mutex类的指针
//CSemaphore* lpWriteSemaphore; //指向写semaphore类的指针
//lpWritedata=&pDatabase;
//lpWritemutex=&(lpWritedata->m_myMutex);
//lpWriteSemaphore=&(lpWritedata->m_mySemaphore);
//CSingleLock sWritelock(lpWritemutex); //同步锁类
//CSingleLock sWritelock(lpWriteSemaphore);
//SysPrintf("写Mutex的地址为 %ld",lpWritemutex);
//SysPrintf("写Semaphore的地址为 %ld",lpWriteSemaphore);
CMutex* glMutex;
//glMutex=&pDatabase.m_myMutex;
glMutex=&m_otherMutex;
while(1){
::WaitForSingleObject(pRecordData.m_hObject, INFINITE);
tcb=(TCB *)pParam;
channel=tcb->chdevno;
if(stopdata==STOPTRUE){
//AfxMessageBox("Stop the recorddata thread");
break;
}
CSingleLock* sWritelock = new CSingleLock(glMutex);
sWritelock->Lock();
Write_data(channel);
sWritelock->Unlock();
delete sWritelock;
//Readwrite_data(channel,NULL,WRITEDATA);
/*if(dbawrite_connect==DBA_TRUE) {
sWritelock.Lock();
try{
sprintf(InsertSQL, "insert into t_data_cjlog(hth,num,cj_money,cj_starttime,cj_endtime) values(\'%s\',\'%s\',\'%s\',TO_DATE(\'%s\', \'YYYY/MM/DD HH24:MI:SS\'),TO_DATE(\'%s\',\'YYYY/MM/DD HH24:MI:SS\'))",
teleinfo[channel].hth,teleinfo[channel].num,teleinfo[channel].cuijiao,teleinfo[channel].qssj_time,teleinfo[channel].zzsj_time);
sprintf(UpdateSQL, "update t_data_cuijiao set cjcount=%d, cjmonth=\'%s\' where hth=\'%s\'",
teleinfo[channel].cjcount,teleinfo[channel].cjmonth,teleinfo[channel].hth);
if(pWritebase.BeginTrans()){
pWritebase.ExecuteSQL(_T(InsertSQL));
//pWritebase.ExecuteSQL(_T(UpdateSQL));
if(pWritebase.CommitTrans()) {
TRACE("Transaction Commited");
dxinfo[channel].chdevzt=CHDEVZT_G;
}
else
{
pWritebase.Rollback();
dxinfo[channel].chdevzt=CHDEVZT_H;
}
}
else{
dxinfo[channel].chdevzt=CHDEVZT_H;
}
}
catch(CDBException* e){
dbawrite_connect=DBA_FALSE;
e->Delete();
//continue;
}
catch(CMemoryException* e){
dbawrite_connect=DBA_FALSE;
e->Delete();
//continue;
}
sWritelock.Unlock();
}*/
if(sr_putevt(dxinfo[channel].chdev,TDX_PLAY,sizeof(DX_IOTT),&dxinfo[channel].iott_cjvalue,0)==-1){
//AfxMessageBox("putevt error");
}
}
return(0);
}
/************************************************************
* 名称:int Write_data(int channel)
* 功能:写数据库的函数
***********************************************************/
int Write_data(int channel)
{
char InsertSQL[INSERTSQL_LENGTH];
char UpdateSQL[UPDATESQL_LENGTH];
if(dba_connect==DBA_TRUE) {
try{
sprintf(InsertSQL, "insert into t_data_cjlog(hth,num,cj_money,cj_starttime,cj_endtime) values(\'%s\',\'%s\',\'%s\',TO_DATE(\'%s\', \'YYYY/MM/DD HH24:MI:SS\'),TO_DATE(\'%s\',\'YYYY/MM/DD HH24:MI:SS\'))",
teleinfo[channel].hth,teleinfo[channel].num,teleinfo[channel].cuijiao,teleinfo[channel].qssj_time,teleinfo[channel].zzsj_time);
sprintf(UpdateSQL, "update t_data_cuijiao set cjcount=%d, cjmonth=\'%s\' where hth=\'%s\'",
teleinfo[channel].cjcount,teleinfo[channel].cjmonth,teleinfo[channel].hth);
if(pDatabase.BeginTrans()){
pDatabase.ExecuteSQL(_T(InsertSQL));
//pDatabase.ExecuteSQL(_T(UpdateSQL));
if(pDatabase.CommitTrans()) {
TRACE("Transaction Commited");
dxinfo[channel].chdevzt=CHDEVZT_G;
}
else
{
pDatabase.Rollback();
dxinfo[channel].chdevzt=CHDEVZT_H;
}
}
else{
dxinfo[channel].chdevzt=CHDEVZT_H;
}
}
catch(CDBException* e){
dba_connect=DBA_FALSE;
AfxMessageBox(e->m_strError, MB_ICONEXCLAMATION );
e->Delete();
return(-1);
}
catch(CMemoryException* e){
dba_connect=DBA_FALSE;
AfxMessageBox("内存错误", MB_ICONEXCLAMATION );
e->Delete();
return(-1);
}
SysPrintf("写数据库成功");
return(1);
}
else{
return(-1);
}
}
/***************************************************************************
* 名称:int Readwrite_data(int channel,MAIN_CJDATA *rddata,int rwflag)
* 功能:操作数据库的函数(实现读写不同步)
**************************************************************************/
/*int Readwrite_data(int channel,MAIN_CJDATA *rddata,int rwflag)
{
int rt;
lpDatabase=&pDatabase;
lpMutex=&(lpDatabase->m_myMutex);
CSingleLock sLock(lpMutex); //同步锁类
SysPrintf("m_myMutex的地址为 %ld",lpMutex);
//CSingleLock sLock(&pDatabase.m_myMutex,TRUE);
if((rwflag==WRITEDATA)&&(sLock.IsLocked()==FALSE))
SysPrintf("写锁已释放");
if((rwflag==READDATA)&&(sLock.IsLocked()==FALSE))
SysPrintf("读锁已释放");
if(sLock.Lock()){
if(rwflag==WRITEDATA)
SysPrintf("写锁成功");
if(rwflag==READDATA)
SysPrintf("读锁成功");
}
Sleep(1000);
if(rwflag==WRITEDATA){
rt=Write_data(channel);
}
else if(rwflag==READDATA){
rt=Readrecord(rddata);
}
if(sLock.Unlock()){
SysPrintf("解锁成功");
}
else
{
SysPrintf("解锁不成功");
}
return(rt);
}*/
/************************************************************
* 名称:void Init_data()
* 功能:初始化数据库的函数
***********************************************************/
void Init_data()
{
CString szcbcount;
CString szmaxcount;
CString szmaxcountflag;
CString szmaxringtime;
CString szcjtimeflag;
CString szstartmonth;
CString szendmonth;
CString szstartday;
CString szendday;
CString szstarthour;
CString szendhour;
CString szstartminute;
CString szendminute;
char ls_tmparg[10];
char ls_i[10];
char cjtimeSQL[200];
int i;
char errormsg[100];
try{
if(pDatabase.Open( _T( "XTCJ170" ), FALSE, FALSE, _T( "ODBC;UID=xt170;PWD=VCplus170" ))==FALSE){
WinPrintf("连接数据库失败");
exit(1);
}
/*if(pWritebase.Open( _T( "XTCJ170" ), FALSE, FALSE, _T( "ODBC;UID=xt170;PWD=VCplus170" ))==FALSE){
WinPrintf("连接数据库write失败");
exit(1);
}*/
}
catch(CDBException* pEx)
{
WinPrintf("连接数据库失败");
pEx->Delete();
exit(1);
}
catch(CMemoryException* pEx)
{
WinPrintf("连接数据库失败");
pEx->Delete();
exit(1);
}
//WinPrintf("db opened ok");
//if((pDatabase.IsOpen()==FALSE)||(pWritebase.I
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -