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

📄 epgdeal.cpp

📁 得到本周内的电视节目预告! f
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				if(strlen(pChan->tvFName) == 0)
					return TRUE;

				s.Format("select * from tv where RegCode = %d and tvFName = \"%s\"",
					0, pChan->tvFName);
				lRet = DealDbLocate(s);
				if(lRet == 0)	//没有找到,并文件加入到库存中
				{
					Chancel ch;
					memcpy(&ch, pChan, sizeof(Chancel));
					ch.RegCode = 0;
					ch.m_nNum = -1;
					if(!DealDbAddChancel(&ch))
					{
						return FALSE;
					}
					bRept = FALSE;
					goto again;
				}
				if(lRet ==1 )
				{
					VARIANT var;
					m_pRecordset->MoveFirst();
					var = m_pRecordset->GetCollect("tvNum");
					pChan->m_nEpgNum = var.iVal;
				}
				else
					pChan->m_nEpgNum = 0;
				bRept = FALSE;
				goto again;	
			}
			//搜索电台名称对应的库存的信息,要填上对应的名称或是对应内部的号
		}
		else
			return FALSE;
		}catch(_com_error e)
		{
			AfxMessageBox(e.ErrorMessage());
		}
	}
	return TRUE;	
}
BOOL CEpgDeal::DealDbLocateChancel(LPChancel pChan)
{
	if(bOpenRecord)
		m_pRecordset->Close();
	CString s;
	HRESULT hr;
	s.Format("SELECT * FROM tv where tvName = \"%s\"", pChan->szName);

	hr = m_pRecordset->Open(_variant_t(s.LockBuffer()),
		_variant_t((IDispatch*)m_pConnection,true),
		adOpenStatic,adLockOptimistic,adCmdText);


	if(FAILED(hr))
	{
		bOpenRecord = FALSE;
		return FALSE;
	}
	bOpenRecord = TRUE;
	return TRUE;
}
long CEpgDeal::DealDbLocate(CString s)
{
	long lret=0;
	try
	{
	if(bOpenRecord)
		m_pRecordset->Close();
	HRESULT hr;

	hr = m_pRecordset->Open(_variant_t(s.LockBuffer()),
		_variant_t((IDispatch*)m_pConnection,true),
		adOpenStatic,adLockOptimistic,adCmdText);
	
	
	if(FAILED(hr))
	{
		bOpenRecord = FALSE;
		return FALSE;
	}

	bOpenRecord = TRUE;
	lret = m_pRecordset->GetRecordCount();
	}catch(_com_error e)
	{	
		AfxMessageBox(e.ErrorMessage());
	}
	return lret;
}
BOOL CEpgDeal::DealDbDelete(CString s)
{
	try
	{
	if(bOpenRecord)
		m_pRecordset->Close();
	HRESULT hr;
	
	hr = m_pRecordset->Open(_variant_t(s.LockBuffer()),
		_variant_t((IDispatch*)m_pConnection,true),
		adOpenStatic,adLockOptimistic,adCmdText);
	
	bOpenRecord = FALSE;	
	if(FAILED(hr))
	{
		return FALSE;
	}
	}catch(_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
	}
	return TRUE;
}
BOOL CEpgDeal::DealDbAddEpg(LPEpgInfo pEpg)
{
	if(DealDbOpenEpg())
	{
		try{
		//判断是否已经有数据了
		CString s, s1;
		COleDateTime oleDate(pEpg->startTime);
		_variant_t vtFld;
		vtFld.vt = VT_DATE;
		vtFld.date = oleDate;
		LONG lRet;

		s1 = oleDate.Format("%d/%m/%Y %H:%M:%S");
		s.Format("select * from epginf where tvnum =%d and datediff(\"n\", tvStartT, #%s#)=0 and datediff(\"h\", tvStartT, #%s#)=0 and datediff(\"d\", tvStartT, #%s#)=0 and datediff(\"m\", tvStartT, #%s#)=0 and datediff(\"y\", tvStartT, #%s#)=0", 
			pEpg->m_nNum, s1.LockBuffer(), s1.LockBuffer(), s1.LockBuffer(), s1.LockBuffer()
			,s1.LockBuffer());
		lRet = DealDbLocate(s);
		if(lRet > 0)
			return FALSE;

		m_pRecordset->AddNew();
		m_pRecordset->PutCollect("tvProgName", _variant_t(pEpg->szprogname));
		m_pRecordset->PutCollect("tvnum", (long)pEpg->m_nNum);
		m_pRecordset->PutCollect("tvStartT", vtFld);
		m_pRecordset->Update();
		}
		catch(_com_error e)
		{
			AfxMessageBox(e.ErrorMessage());
			return FALSE;
		}
	}	
	return TRUE;
}
BOOL CEpgDeal::DealDbDelEpg(LPEpgInfo pEpg)
{
	if(DealDbOpenEpg())
	{
		try{
		LONG l = m_pRecordset->GetRecordCount();
		if(!pEpg)
		{
			return FALSE;
		}
		else
		{
			if(l>0)
			{
				if(!m_pRecordset->BOF)
					m_pRecordset->MoveFirst();
				while(!m_pRecordset->adoEOF)
				{
					m_pRecordset->Delete(adAffectCurrent);	
					m_pRecordset->MoveNext();
				}
				
				l = m_pRecordset->GetRecordCount();
			}
		}
		}catch(_com_error e)
		{
			AfxMessageBox(e.ErrorMessage());
			return FALSE;
		}
	}
	return TRUE;
}
BOOL CEpgDeal::DealDbEditEpg(LPEpgInfo pEpg)
{
	if(DealDbOpenEpg())
	{
		//查找到Epg信息
	}
	return FALSE;	
}
BOOL CEpgDeal::DealBuildEpgFromFile(int num, CString strFile)
{
	DWORD dwRet = 0;

	if(bdownloading)
		return FALSE;
	
	CString s;

	CString strPrev, strNext, strCur;

	EpgInfo m_epg;

	if(!strFile.IsEmpty())
	{
		strFile = "\\节目单\\"+strFile;
		strFile = m_initParam.szZipPath + strFile;
		CStdioFile file;
		if(!file.Open(strFile, CFile::modeRead))
		{
			return TRUE;
		}
		
		CTime tm = CTime::GetCurrentTime();
		CString strWeek, strDate, strStartTime, strProgram;
		CString strLine, strTemp;
		CStringArray arrProgram;
		BOOL bNextDay = FALSE;
		int nYear = 0, nMon = 0, nDay = 0;
		int nHour = 0, nMin = 0, nSec = 0;
		int nPreHour = 0;
		int nPos = 0;

		CString strW = "星期";

		while(file.ReadString(strLine))
		{
			TCHAR ch = 0x09;	//tab
			
			while(strLine.Left(1) == _T(" ") || 
				strLine.Left(1) == ch)
				strLine = strLine.Mid(1);
			
			if(strLine.IsEmpty())
				continue;

			if(!strW.IsEmpty())
			{
				if(strLine.Find(strW) != -1)
				{
 					nYear = tm.GetYear();
					nMon  = atoi(strLine.Mid(3, 2));
					nDay  = atoi(strLine.Mid(6, 2));
					strDate.Format(_T("%04d-%02d-%02d"), nYear, nMon, nDay);
				}
				else
				{
					nPos = strLine.Find(ch);
					if(nPos == -1)
					{
						ch = ' ';	//空格
						nPos = strLine.Find(ch);
						if(nPos == -1)
							return FALSE;
					}

					strProgram = strLine.Mid(nPos);
					
					strTemp = strLine.Left(nPos);
					nPos = strTemp.Find(_T(":"));
					if(nPos != -1)
					{
						nHour = atoi(strTemp.Mid(0, 2));

						nHour = nHour % 24;					//有的文件竟然有27:30:00 这种格式
						nPreHour = nHour;
						nMin  = atoi(strTemp.Mid(3, 2));
						nSec  = 0;//atoi(strTemp.Mid(6, 2));//有的文件没有秒数的。
					}
					strStartTime.Format("%02d:%02d", nHour, nMin);
					while(strProgram.Left(1) == _T(" ") || strProgram.Left(1) == ch)
						strProgram = strProgram.Mid(1);
					TRACE("%s %s, %s", strDate, strStartTime, strProgram);
					COleDateTime time1(nYear,nMon,nDay, nHour,nMin,0); 
					ZeroMemory(&m_epg, sizeof(EpgInfo));
					time1.GetAsSystemTime(m_epg.startTime);
					strcpy(m_epg.szprogname, strProgram);
					m_epg.m_nNum = num;
					if(DealDbAddEpg(&m_epg)== FALSE);
				}
			}
		}
	}
	else	//找不到对应的文件
	{

	}
	return TRUE;
}
BOOL CEpgDeal::DealBuildEpg()
{
	CString s;
	int num;
	CUIntArray arNum;
	CStringArray arFname;
	LONG lRet;
	
	s.Format("select * from tv where tvSel = TRUE");

	lRet = DealDbLocate(s);
	VARIANT var;
	int i;

	try
	{
	if(lRet>0)
		m_pRecordset->MoveFirst();
	for(i= 0; i< lRet; i++)
	{
		var = m_pRecordset->GetCollect("tvNum");
		arNum.Add(var.intVal);
		var = m_pRecordset->GetCollect("tvFName");
		arFname.Add(var.bstrVal);
		m_pRecordset->MoveNext();
	}
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
		return FALSE;
	}
	for(i = 0;i< lRet; i++)
	{
		num = arNum[i];
		s = arFname[i];
		DealBuildEpgFromFile(num, s);
	}
	return TRUE;
}
BOOL CEpgDeal::DealLocateTodayEpg(LPChancel pChan)
{
	CString s, s1;
	LONG lRet;

	ReleaseListEpg();

	if(!DealDbCheckHasEpg(pChan))
		return FALSE;

	CTime t = CTime::GetCurrentTime();
	s1 = t.Format("%m/%d/%Y");
	s.Format("select * from epginf where tvNum =%d and datediff(\"d\", tvStartT, #%s#)=0 order by tvStartT"
		, pChan->m_nEpgNum,  s1.LockBuffer());
	int ncnt =2;

	lRet = DealDbLocate(s);
	try{
	if(lRet > 0)
		m_pRecordset->MoveFirst();
	else
		return FALSE;

	AllocListEpg(lRet);
	for(int i= 0;i < lRet; i++)
	{
		DealDbGetCurEpgRecrod();
		m_pRecordset->MoveNext();
	}
	}catch(_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
		return FALSE;
	}

	return TRUE;
}
BOOL CEpgDeal::DealLocateCur5Epg(LPChancel pChan)
{
	CString s, s1;
	LONG lRet;
	int nNum = 3;

	ReleaseListEpg();
	AllocListEpg(nNum);

	CTime t = CTime::GetCurrentTime();
	s1 = t.Format("%m/%d/%Y %H:%M:%S");
	//判断当天有无Epg信息,无则加入到数据库中
	if(!DealDbCheckHasEpg(pChan))
		return FALSE;

	//取当前的第一个,看有无相等的
	s.Format("select * from epginf where tvnum =%d and 	datediff(\"n\", tvStartT, #%s#)=0 	and datediff(\"d\", tvStartT, #%s#)=0  order by tvStartT"
		, pChan->m_nEpgNum, s1.LockBuffer(), s1.LockBuffer());
	lRet = DealDbLocate(s);
	if(lRet == 0)
	{
		//取比当前时间稍早的一个
		s.Format("select * from epginf where tvnum =%d and 	datediff(\"n\", tvStartT, #%s#)>0 	and datediff(\"d\", tvStartT, #%s#)=0  order by tvStartT"
			, pChan->m_nEpgNum, s1.LockBuffer(), s1.LockBuffer());
		lRet = DealDbLocate(s);	
	}
	if(lRet > 0)
	{
		m_pRecordset->MoveLast();
		DealDbGetCurEpgRecrod();
		nNum -= 1;
	}
	
	//取后面的几个
	s.Format("select top %d * from epginf where tvnum =%d and 	datediff(\"n\", tvStartT, #%s#)<0 	and datediff(\"d\", tvStartT, #%s#)=0  order by tvStartT"
		, nNum , pChan->m_nEpgNum, s1.LockBuffer(), s1.LockBuffer());
	lRet = DealDbLocate(s);
	COleDateTime oleTime;
		
	if(lRet > 0)		
		m_pRecordset->MoveFirst();

	for(int i= 0;i < lRet; i++)
	{
		DealDbGetCurEpgRecrod();
		m_pRecordset->MoveNext();
	}
	nNum -= lRet;
	if(0 < nNum)
	{
		CTimeSpan tt(1, 0,0,0);
		t += tt;
		s1 = t.Format("%m/%d/%Y");
		s1 += " 0:0:0";
		s.Format("select top %d * from epginf where tvnum =%d and 	datediff(\"n\", tvStartT, #%s#)<0 	and datediff(\"d\", tvStartT, #%s#)=0  order by tvStartT"
			, nNum , pChan->m_nEpgNum, s1.LockBuffer(), s1.LockBuffer());
		lRet = DealDbLocate(s);
		if(lRet > 0)
			m_pRecordset->MoveFirst();
		for(int i= 0;i < lRet; i++)
		{
			DealDbGetCurEpgRecrod();
			m_pRecordset->MoveNext();
		}
	}
	return TRUE;
}
BOOL CEpgDeal::DealDbGetCurEpgRecrod()
{
	VARIANT var;
	COleDateTime oletime;
	CString s, s1;
	var = m_pRecordset->GetCollect("tvProgName");
	s = var.bstrVal;
	strcpy(m_listEpg[m_nEpg].szprogname, s.LockBuffer());
	var = m_pRecordset->GetCollect("tvStartT");
	oletime = var.date;
	oletime.GetAsSystemTime(m_listEpg[m_nEpg].startTime);
	m_nEpg ++;

	s1 = oletime.Format("%Y-%m-%d %H:%M:%S");
	s += s1;
	TRACE("%s", s);
	return TRUE;
}
BOOL CEpgDeal::DealDbGetCurChanRecrod()
{
	VARIANT var;
	CString s, s1;
	
	try
	{
	var = m_pRecordset->GetCollect("tvName");
	if(var.vt != VT_NULL)
	{
		s = var.bstrVal;
		if(!s.IsEmpty())
			strcpy(m_listChan[m_nChan].szName, s.LockBuffer());
	}

	var = m_pRecordset->GetCollect("tvFName");
	if(var.vt != VT_NULL)
	{
		s = var.bstrVal;
		if(!s.IsEmpty())
			strcpy(m_listChan[m_nChan].tvFName, s.LockBuffer());
	}
	
	var = m_pRecordset->GetCollect("tvFrq");
	m_listChan[m_nChan].lfrequent = var.lVal;

	var = m_pRecordset->GetCollect("tvNum");
	m_listChan[m_nChan].m_nEpgNum = var.iVal;

	var = m_pRecordset->GetCollect("nNum");
	m_listChan[m_nChan].m_nNum = var.iVal;

	var = m_pRecordset->GetCollect("RegCode");
	m_listChan[m_nChan].RegCode = var.iVal;

	var = m_pRecordset->GetCollect("tvSel");
	m_listChan[m_nChan].tvSel = var.bVal;
	var = m_pRecordset->GetCollect("tvFav");
	m_listChan[m_nChan].tvFav = var.bVal;
	}catch(_com_error e)
	{
		AfxMessageBox(e.ErrorMessage());
		return FALSE;
	}
	s1.Format(" %d", m_listChan[m_nChan].lfrequent);
	s += s1;
	m_nChan ++;
	TRACE("%s", s);
	return TRUE;
}
BOOL CEpgDeal::CheckCurChan()
{
	CString s,s1;
	LONG lRet;
	CTime t = CTime::GetCurrentTime();
	s1 = t.Format("%d/%m/%Y");
	s.Format("select * from tv where RegCode = %d ", 
		1);
	lRet = DealDbLocate(s);
	if(lRet > 0)
		return FALSE;
	DealCopyAsCur(1, 0);
	return TRUE;
}
BOOL CEpgDeal::CheckDownLoad()
{
	CString s,s1;
	LONG lRet;
	CTime t = CTime::GetCurrentTime();
	s1 = t.Format("%d/%m/%Y");
	s.Format("select * from epginf where datediff(\"d\", tvStartT, #%s#)=0 ", 
		 s1.LockBuffer());
	lRet = DealDbLocate(s);
	if(lRet > 10)
		return FALSE;

	DownLoadEpg();
	return TRUE;
}

UINT DownloadThread(void *pArg)
{
	CEpgDeal *pWnd = (CEpgDeal*)pArg;
	
	CString strInfo;

⌨️ 快捷键说明

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