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

📄 sqlproc.cpp

📁 百色电信中继电话录音系统,是对于电话会议接入到本中继系统进行电话录音
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			}
			e->Delete();
		}*/
		catch(...)
		{
			strcat(strfn,":打开时遇到未知异常!");
			PostMsg(strfn);
			return;
		}
		try
		{
			myfile.SeekToEnd();
			char endchars[5];
			sprintf(endchars,"%c",10);
			strcat(strsql,endchars);
			myfile.Write(strsql,strlen(strsql));
			myfile.Close();
		}
		catch (CFileException* e) 
		{
			
			sprintf(ts,"%s 写入异常:%d",e->m_strFileName,e->m_cause);
			PostMsg(ts);
			e->Delete();
			myfile.Close();
		}
		catch(...)
		{
			strcat(strfn,"写入时遇到未知异常!");
			PostMsg(strfn);
		}
	}
	catch(...)
	{
		PostMsg("文件写入异常");
		try
		{
			myfile.Close();
		}
		catch(CFileException* e)
		{
			sprintf(ts,"%s 文件关闭异常:%d",e->m_strFileName,e->m_cause);
			PostMsg(ts);
			e->Delete();
		}
		catch(...)
		{
			strcat(strfn,":关闭时遇到未知异常!");
			PostMsg(strfn);
		}
	}
}

void CSqlProc::PostMsg(char *msg)
{	//在主界面显示字符串
	sprintf(Sql_ProcMsg[curpos],"%s",msg);
	::PostMessage(mainwnd,WM_PROCMSG,curpos,SQLPROC_SHOWMSG);
	curpos=(curpos+1)%SQLPROC_MAXQUEUE;
}

static VOID __stdcall ScanDatabase(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{	//时间响应函数
	return;
}
void CSqlProc::OnTimer()
{
	int ischange;
	char* fbuff=NULL;

	char sql[100];
	if(m_dbok)
	{
		try	//扫描字冠改动
		{
			 
			sprintf(sql,"select ischange from dbo.CHANGE_FLAG");
			SQLCloseCursor ( hOdbcStmt );
			SQLFreeStmt ( hOdbcStmt, SQL_CLOSE );
			ret = SQLExecDirect ( hOdbcStmt, (SQLCHAR *)sql, SQL_NTS );
			if ( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO ) 
			{
				SQLBindCol ( hOdbcStmt, 1, SQL_C_LONG, &ischange, sizeof(ischange), &x );
				ret=SQLFetch ( hOdbcStmt);
				if(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
				{
					ret = SQLCloseCursor ( hOdbcStmt );
					ret = SQLFreeStmt ( hOdbcStmt, SQL_CLOSE );
					if(ischange==1) //字冠已改动,发出字冠更新信息
					{
						PostMsg("字冠改动!");
						releaselink(zgb_fp);
						if(!GetZgFromSQL())
							GetZgFromFile();
					}
					::PostMessage(mainwnd,WM_PROCMSG,curpos,SQLPROC_WORKING);	//向界面线程汇报其工作正常
				}
				else
				{PostMsg("CHANGE_FLAG表为空");}
			}
			else
			{
				PostMsg("select ischange from dbo.CHANGE_FLAG执行失败!");
				m_dbok=false;
				::PostMessage(mainwnd,WM_PROCMSG,curpos,SQLPROC_SERV_FAILD);
			}
		}
		catch(CDBException* e)
		{
			e->Delete();
			m_dbok=false;
			::PostMessage(mainwnd,WM_PROCMSG,curpos,SQLPROC_SERV_FAILD);
		}
		catch(...)
		{
			m_dbok=false;
			::PostMessage(mainwnd,WM_PROCMSG,curpos,SQLPROC_SERV_FAILD);
		}
		//扫描字冠改动-END
	}
	else
	{
		//重新连接数据库
		if(connectdb())
		{
			PostMsg("连接数据库成功,准备回写滞留的数据");
			//遍历tempdata目录,读出所有暂存的文件
			CFileFind ff;
			CString strfn;
			BOOL res=ff.FindFile("c:\\recsys\\tempdata\\*.*");
			while(res)
			{
				res=ff.FindNextFile();
				if(!ff.IsDirectory()&&!ff.IsDots())
				{
					strfn=ff.GetFilePath();
					RestoreTempData(strfn);
				}
			}
			ff.Close();
		}
	}
}

void CSqlProc::RestoreTempData(CString strfn)
{	//数据库恢复后把临时存在本地的数据写回数据库
	
	CFile myfile;
	CFileException fe;
	char ts[500],tline[1024],fn[255];
	char *fbuff=NULL,*tp=NULL,*tl=NULL;
	long ti=0,haveread=0;
	sprintf(fn,"%s",strfn);
	try		//打开文件
	{
		if(!myfile.Open(fn,CFile::modeRead,&fe))
		{
			if(fe.m_cause==CFileException::fileNotFound)
			{
				sprintf(ts,"%s 文件不存在",fe.m_strFileName);
				PostMsg(ts);
				m_restored=true;
				return;
			}
			else if(fe.m_cause==CFileException::sharingViolation)
			{
				Sleep(1000);
				if(!myfile.Open(fn,CFile::modeRead,&fe))
				{
					sprintf(ts,"%s 打开错误:%d",fe.m_strFileName,fe.m_cause);
					PostMsg(ts);
					m_restored=false;
					return;
				}
			}
		}
	}
	catch (CFileException* e) 
	{
		sprintf(ts,"%s 打开异常:%d",e->m_strFileName,e->m_cause);
		PostMsg(ts);
		m_restored=false;
		return;
	}
	catch(...)
	{
		PostMsg("临时数据库文件打开时遇到未知异常!");
		m_restored=false;
		return;
	}

	try	//读入文件
	{
		fbuff=new char[1024*1024*10];
		memset(fbuff,0,1024*1024*10);
		haveread=myfile.ReadHuge(fbuff,1024*1024*10);
		myfile.Close();
		tp=fbuff;
		ti=0;
	}
	catch (CFileException* e) 
	{
		sprintf(ts,"%s 读入异常:%d",e->m_strFileName,e->m_cause);
		PostMsg(ts);
		e->Delete();
		myfile.Close();
		delete fbuff;
		m_restored=false;
		return;
	}
	catch(...)
	{
		PostMsg("滞留数据读取时发生未知的错误!");
		try
		{
			if(fbuff)
				delete fbuff;
			myfile.Close();
		}
		catch(CFileException* e)
		{
			sprintf(ts,"%s 文件关闭异常:%d",e->m_strFileName,e->m_cause);
			PostMsg(ts);
			e->Delete();
		}
		catch(...)
		{
			PostMsg("tempsql.txt关闭时遇到未知异常!");
		}
		m_restored=false;
		return;
	}	
	while(tp!=0&&ti<haveread)
	{
		tl=tline;
		memset(tline,0,1024);
		while(*tp!=10&&ti<haveread)
		{*tl=*tp;tp++;tl++;ti++;}
		tp++;ti++;
		//回写数据
		try
		{
			m_database.ExecuteSQL(tline);
		}
		catch (CDBException* e) 
		{
		//	delete fbuff;
			sprintf(ts,"回写滞留数据时,语句%s:%s",tline,e->m_strError);
			PostMsg(ts);
			e->Delete();
		}
		catch(...)
		{
		//	delete fbuff;
			sprintf(ts,"回写滞留数据时,语句%s:出现未知异常",tline);
			PostMsg(ts);
		}
		//回写完毕
	}
	m_restored=true;
	delete fbuff;
	sprintf(ts,"完成滞留数据文件:%s 的写入",fn);
	PostMsg(ts);
	//删除滞留本地的数据文件
	try
	{
		if(!DeleteFile(fn))
		{
			sprintf(ts,"%s--删除失败!",fn);
			PostMsg(ts);
			Sleep(500);
			DeleteFile(fn);
		}
	}
	catch (...)
	{
		sprintf(ts,"%s--删除异常!",fn);
		PostMsg(ts);
		return;
	}
	//删除滞留本地的数据文件-END
}

LRESULT CSqlProc::OnExeSql( WPARAM wParam,LPARAM lParam )
{
	exesql(Sql_Command[wParam]);
	return 0;
}
LRESULT CSqlProc::OnKillThread( WPARAM wParam,LPARAM lParam )
{
	AfxEndThread(0);
	return 0;
}

LRESULT CSqlProc::OnGetFtpQueue(WPARAM wParam, LPARAM lParam)
{
	char ts[500];
	char filename[255];
	char curtime[30];
	int groupid=0;
	char sql[100];
	//扫描FTP等待队列
		try
		{
			sprintf(sql,"select curtime,filename,group_id,trytimes from dbo.FTP_QUEUE");
			SQLCloseCursor ( hOdbcStmt );
			SQLFreeStmt ( hOdbcStmt, SQL_CLOSE );
			ret = SQLExecDirect ( hOdbcStmt, (SQLCHAR *)sql, SQL_NTS );
			if ( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO ) 
			{
				SQLBindCol ( hOdbcStmt, 1, SQL_C_CHAR, &curtime, sizeof(curtime), &x );
				SQLBindCol ( hOdbcStmt, 2, SQL_C_CHAR, &filename, sizeof(filename), &x );
				SQLBindCol ( hOdbcStmt, 3, SQL_C_LONG, &groupid, sizeof(groupid), &x );
//				SQLBindCol ( hOdbcStmt, 4, SQL_C_LONG, &trytimes, sizeof(trytimes), &x );
				ret=SQLFetch ( hOdbcStmt);
				while(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
				{
					ret = SQLCloseCursor ( hOdbcStmt );
					ret = SQLFreeStmt ( hOdbcStmt, SQL_CLOSE );
					//有上传失败的文件,发出重新上传的命令
					sprintf(Sql_ProcMsg[curpos],"e:\\rec\\%d\\%s",groupid,filename);
					::PostMessage(mainwnd,WM_PROCMSG,curpos,SQLPROC_NEEDFTP);
					curpos=(curpos+1)%SQLPROC_MAXQUEUE;
					sprintf(sql,"delete from dbo.FTP_QUEUE where filename='%s' and group_id=%ld",filename,groupid);
					ret=SQLExecDirect ( hOdbcStmt, (SQLCHAR *)sql, SQL_NTS );
					ret=SQLFetch ( hOdbcStmt);
				}
			}
			else
			{
				sprintf(ts,":%s执行失败!",sql);
				PostMsg(ts);
				m_dbok=false;
				::PostMessage(mainwnd,WM_PROCMSG,curpos,SQLPROC_SERV_FAILD);
			}
		}
		catch (...) 
		{
			PostMsg("扫描FTP_QUEUE表时出现异常!");
			m_dbok=false;
			::PostMessage(mainwnd,WM_PROCMSG,curpos,SQLPROC_SERV_FAILD);
		}
		//扫描FTP等待队列-END
		return 0;
}

BOOL CSqlProc::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	switch(pMsg->message) {
	case WM_TIMER:
		{
			OnTimer();
		}
		break;
	default:	;
	}	
	return CWinThread::PreTranslateMessage(pMsg);
}

⌨️ 快捷键说明

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