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

📄 datafuncold.h

📁 170话费催交系统
💻 H
📖 第 1 页 / 共 5 页
字号:
			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 + -