Скачиваний:
72
Добавлен:
01.05.2014
Размер:
11.43 Кб
Скачать
#include "stdafx.h"
#include "CSchedule.h"
#include "afxtempl.h"
//
CSchedule::CSchedule( CDatabase* pDatabase )
      :CRecordset(pDatabase)
{
	m_nFields = 4;

}
void CSchedule::DoFieldExchange(CFieldExchange* pFX)
{
	pFX ->  SetFieldType(CFieldExchange::outputColumn);//(CFieldExchange* pFX);

	RFX_Date(pFX, _T("DateS"), d_DateSession);//s_FuckenSQLDate, 12);
	RFX_Text(pFX, _T("FilmS"), s_FilmSession, 100);
	RFX_Date(pFX, _T("Session"), d_TimeSession);
	RFX_Int(pFX, _T("Bilet"), i_TicketSession);
}
/////////////////////////////Считываем информацию из Access/////////////////
void CSchedule::GetRepInfo(CMapStringToPtr* ptrMapRep)
{
	CDatabase db;
	CDBVariant cdbv;
	db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
	CRecordset RecSet( &db );
	(*ptrMapRep).RemoveAll(); /// Удаляем ВСЕ записи в Map
try
{
	RecSet.Open(CRecordset::forwardOnly,"SELECT* FROM DBRepertoir");//множество записей доступных только для чтения (::forwardOnly)
	do{		
		   RecSet.GetFieldValue("DateS", cdbv);
		   CTime date(cdbv.m_pdate->year,cdbv.m_pdate->month,cdbv.m_pdate->day,0,0,0,-1);  
           d_DateSession = date;  
		   // с этим были проблемы - не записать в БД дату в формате CTime                                                       
		//   d_DateSession = ConvertStrDateToCTime(*(cdbv.m_pstring));
		   RecSet.GetFieldValue("FilmS", cdbv);
		   s_FilmSession = *(cdbv.m_pstring);
		   RecSet.GetFieldValue("Session", cdbv);
		   CTime time(2000,12,30,cdbv.m_pdate->hour,cdbv.m_pdate->minute,0,-1);
		   d_TimeSession = time;
		   RecSet.GetFieldValue("Bilet", cdbv);
		   i_TicketSession = cdbv.m_lVal;
  
		    void* ptrVoid = new CSchedule(d_DateSession,s_FilmSession,d_TimeSession,i_TicketSession);
			void* temp;
			if( (*ptrMapRep).Lookup(s_FilmSession, temp) )
			{
				CPtrList* tempPtrList = ((CPtrList*)temp);
				tempPtrList -> AddHead(ptrVoid);
                //(*ptrMapRep)[s_FilmSession] = ((void*) tempPtrList);
			}
			else
			{
				CPtrList* ptrList = new CPtrList;
				ptrList -> AddHead(ptrVoid);
			   (*ptrMapRep)[s_FilmSession] = ((void*) ptrList);
			}

		
     RecSet.MoveNext();
	}
	while( !RecSet.IsEOF() );
	RecSet.Close();
	db.Close();
}
catch(CDBException* pException)
{
       AfxMessageBox( pException -> m_strStateNativeOrigin );
	   AfxMessageBox( pException -> m_strError );
	   pException -> Delete();

}
}
void CSchedule::AddRepInfo(CMapStringToPtr* ptrMapRep, CSchedule* ptrSchedule)
{
	      CDatabase db; 
	      db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
	      CSchedule RecSet ( &db );
  try
     {
		 if(!RecSet.Open(CRecordset::snapshot,"SELECT* FROM DBRepertoir"))											                         
	     {AfxMessageBox("Can Not Open 'Recordset' !"); return;}

     
	     if(!RecSet.CanAppend())
	     {AfxMessageBox("function CanAppend is Failure! ( No Field Values Were Set! )"); return;}

	     if(!RecSet.CanUpdate())

		 {AfxMessageBox("function CanUpdate is Failure! ( Can't Update Database! )"); return;}

		 
	     RecSet.AddNew();

         RecSet.d_DateSession = ptrSchedule->d_DateSession;
		// RecSet.s_FuckenSQLDate = RecSet.d_DateSession.Format("%d.%m.%Y");
		 RecSet.s_FilmSession = ptrSchedule->s_FilmSession;
		 RecSet.d_TimeSession = ptrSchedule->d_TimeSession;
		 RecSet.i_TicketSession = ptrSchedule->i_TicketSession;

	     RecSet.Update();
	     RecSet.Close();	
	     db.Close();


     }
     catch (CDBException* pException)
         {
	       AfxMessageBox( pException -> m_strStateNativeOrigin );
		   AfxMessageBox( pException -> m_strError );
	   	   pException -> Delete();
         }
	                      void *ptrVoid = ((void *)ptrSchedule);
			              void* temp;
			              if( (*ptrMapRep).Lookup(s_FilmSession, temp) )
			                {
				             CPtrList* tempPtrList = ((CPtrList*)temp);
				             tempPtrList -> AddHead(ptrVoid);
			                }
			              else
			                {
				             CPtrList* ptrList = new CPtrList;
				             ptrList->AddHead(ptrVoid);
			                (*ptrMapRep)[s_FilmSession] = ((void*) ptrList);
			                }

}
CTime CSchedule::ConvertStrDateToCTime(CString Str)/// Str в формате : "00.00.0000"
{
	 int i,k=0,rez,p=0, Day=0, Month=0, Year=0;
	 char* str1 = new char[5];
	 
//_____________Day______	
	 k = Str.Find('.');
	 for(i=0,p=0; i < k; i++)
	 {
		 str1[p] = Str[i];
		 p++;
	
	 }	
	 		
	   rez = atof(str1);
	   Day = rez;
//_____________Month______	
	for(i=k+1,p=0;(i<Str.Find('.',k+1));i++)
	 {
		 str1[p] = Str[i];
		 p++;
	 }	 
		 
	 rez = atof(str1);
	 Month = rez;
	 k = i+1;
//_____________Year______	

	 for(i=k,p=0;(i<Str.Find('\0',k));i++)
	 {
		 str1[p] = Str[i];
		 p++;
	 }	 
		 
	 rez = atof(str1); 
	 Year = rez;
	// ASSERT(str1);
	 delete []str1;
	 CTime date(Year, Month, Day,0,0,0,-1);
	 return date;
}

void CSchedule::EditRepInfo(CMapStringToPtr* ptrMapRep, CSchedule* ptrSchedule, CSchedule* oldpSchedule)
{
		  CDatabase db; 
		  CDBVariant cdbv;
	      db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
	      CSchedule* RecSet = new CSchedule ( &db );
		  int I = 1;
		  CString a = (oldpSchedule -> s_FilmSession);
		  CTime   b = (oldpSchedule -> d_DateSession),
				  c = (oldpSchedule -> d_TimeSession);
		  int	  d = (oldpSchedule -> i_TicketSession);

   try
     {
		 if(!RecSet->Open(CRecordset::snapshot,"SELECT* FROM DBRepertoir"))		                              
	     {AfxMessageBox("Can Not Open 'Recordset' !"); return;}
     
	     if(!RecSet->CanAppend())
	     {AfxMessageBox("function CanAppend is Failure! ( No Field Values Were Set! )"); return;}

	     if(!RecSet->CanUpdate())
	     {AfxMessageBox("function CanUpdate is Failure! ( Can't Update Database! )"); return;}
       //  CString s,str;
	//	 RecSet->GetFieldValue("Session", cdbv);
//		 CTime TimE(2000,12,30,cdbv.m_pdate->hour,cdbv.m_pdate->minute,0,-1);
//		 CTime _time_ = TimE;
		 
         for(I=0;I!=-1;)
		 {
			 if( (*RecSet) == (*oldpSchedule))/*a==(RecSet.s_FilmSession) && 
				 b==(RecSet.d_DateSession) && 
				 c==(_time_) && 
				 d==(RecSet.i_TicketSession)) */
			 {I=-1;//AfxMessageBox("I=-1!!!",MB_ICONINFORMATION);
			 }
			 else {//AfxMessageBox(RecSet->s_FilmSession);
			 RecSet->Move(I);I=1; 
	//		 RecSet->GetFieldValue("Session", cdbv);
		//     CTime time(2000,12,30,cdbv.m_pdate->hour,cdbv.m_pdate->minute,0,-1);
	//		 _time_ = time;
			/* s.Format("RecSet:%d; d:%d\r\n",RecSet.i_TicketSession,d);
			 str=s;
			 str+="RecSet :";
			 str+=RecSet.d_DateSession.Format("%d.%m.%Y");
			 str+=" d:";
			 str+=b.Format("%d.%m.%Y");
			 str+="\r\nRecSet :";
			 str+=_time_.Format("%H : %M");
			 str+=" d:";
			 str+=c.Format("%H : %M");
			 str+="\r\nRecSet :";
			 str+=RecSet.s_FilmSession;
			 str+=" d:";
			 str+=a;
			 AfxMessageBox(str,MB_ICONSTOP);*/
			 
			 }
		 }/*while(I);/*(RecSet.s_FilmSession != a &&
			 RecSet.d_DateSession != b &&
			 RecSet.d_TimeSession != c &&
			 RecSet.i_TicketSession != d );*/

		 RecSet->Edit();

         RecSet->d_DateSession = ptrSchedule -> d_DateSession;
		 RecSet->s_FilmSession = ptrSchedule -> s_FilmSession;
		 RecSet->d_TimeSession = ptrSchedule -> d_TimeSession;
		 RecSet->i_TicketSession = ptrSchedule -> i_TicketSession;

	     RecSet->Update();
	     RecSet->Close();
		 delete RecSet;
	     db.Close();

     }
     catch (CDBException* pException)
         {
	       AfxMessageBox( pException -> m_strStateNativeOrigin );
		   AfxMessageBox( pException -> m_strError );
	   	   pException -> Delete();
         
		 }
		/////////////////////
		 POSITION pos1, pos2;
		 void* ptr;
		 void* ptrVoid = ((void*) this);
		 if((*ptrMapRep).Lookup(a, ptr))
		 {
		    CPtrList* ptrList = ((CPtrList *)ptr);
	        for( POSITION pos1 = ptrList->GetHeadPosition(); (pos2=pos1) != NULL; )
		    {  
			   ptr = (ptrList -> GetNext( pos1 ));
			   CSchedule* schedule;
			   schedule = ((CSchedule *)(ptr));
			   if(oldpSchedule == schedule)//a==(schedule -> s_FilmSession) && b==(schedule -> d_DateSession) && c==(schedule -> d_TimeSession) && d==(schedule -> i_TicketSession))
			   {  
				  ptrList -> RemoveAt(pos2); 
				  delete schedule;
				  ptrList -> AddHead(ptrVoid);
			   } 
		    }
		 }
		 //////////////////////
         else
		  {
			    AfxMessageBox("КАК Вы выделили НЕСУЩЕСТВУЮЩУЮ запись ????!!!!",MB_ICONSTOP);
		  }
}
void CSchedule::DelRepInfo(CMapStringToPtr* ptrMapRep, CString sFilm, CString sDate, CString sTime, CString sTicket)
{
		  int I = 0;
		  
		  CDatabase db; 
		  CDBVariant cdbv;
	      db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
	      CSchedule RecSet ( &db );
try
     {

		 if(!RecSet.Open(CRecordset::snapshot, "SELECT* FROM DBRepertoir"))
		 {AfxMessageBox("Can Not Open 'Recordset' !"); return;}

	     CString s,str;
		 RecSet.GetFieldValue("Session", cdbv);
		 CTime TimE(2000,12,30,cdbv.m_pdate->hour,cdbv.m_pdate->minute,0,-1);
		 CTime _time_ = TimE;
		 char *stopstring;
		 int d = (strtol(sTicket,&stopstring,10));
		 
         for(I=0;I!=-1;)
		 {
			 if( sFilm==(RecSet.s_FilmSession) && 
				 sDate==(RecSet.d_DateSession).Format("%d.%m.%Y") && 
				 sTime==(_time_).Format("%H : %M") &&//(RecSet.d_TimeSession) && 
				 (d) == (RecSet.i_TicketSession))
			 {I=-1;//AfxMessageBox("I=-1!!!",MB_ICONINFORMATION);
			 }
			 else {RecSet.Move(I);I=1; 
			 RecSet.GetFieldValue("Session", cdbv);
		     CTime time(2000,12,30,cdbv.m_pdate->hour,cdbv.m_pdate->minute,0,-1);
			 _time_ = time;
			 }
		 }
         void* ptr;
		 int i = -1 ;
		 POSITION pos1, pos2;
		 if((*ptrMapRep).Lookup(sFilm, ptr))
		 {
		    CPtrList* ptrList = ((CPtrList *)ptr);
	        for( POSITION pos1 = ptrList->GetHeadPosition(); (pos2=pos1) != NULL; )
		    {  
			   ptr = (ptrList -> GetNext( pos1 ));
			   i ++ ;
			   CSchedule* schedule;// = new CSchedule();
			   schedule = ((CSchedule *)(ptr));
			   if(schedule == this)
			   {  
				  ptrList->RemoveAt(pos2);
				  delete schedule;
			   } //else delete schedule;
		    }
		 }
		 if( i == 0 )
		 {
			 (*ptrMapRep).Lookup(sFilm, ptr);
			 CPtrList* list = ((CPtrList*) ptr);
			 delete list;
			 (*ptrMapRep).RemoveKey(sFilm);
              
		 }
		 RecSet.Delete();
	     
		 if(!RecSet.IsDeleted())
		 {
			 AfxMessageBox("Нельзя удалить !");
		 }

	//	 if((*ptrMapRep).RemoveKey(Str)){}
		// {AfxMessageBox("Удалено из Словаря", MB_ICONINFORMATION);}
		// else {AfxMessageBox("Не удаётся удалить из Словаря !", MB_ICONSTOP);}

	     RecSet.Close();
	     db.Close();

	 }
catch(CDBException* pException)
	 {
		 AfxMessageBox( pException -> m_strStateNativeOrigin );
		 AfxMessageBox( pException -> m_strError );
	   	 pException -> Delete();
     }

}
BOOL CSchedule::operator ==(CSchedule& a)
{
	int i = 0;
	CString time1, time2;
	time1 = d_TimeSession.Format("%H : %M");
	time2 = a.d_TimeSession.Format("%H : %M");
	if(s_FilmSession == a.s_FilmSession) i++;
	if(d_DateSession == a.d_DateSession) i++;
	if(time1 == time2) i++;
	if(i_TicketSession == a.i_TicketSession) i++;
	if(i == 4)
	{
		return TRUE;
		i=0;
	}
	else
	{
		return FALSE;
		i=0;
	}

}
Соседние файлы в папке DBKino_Last_Release