Скачиваний:
71
Добавлен:
01.05.2014
Размер:
5.9 Кб
Скачать
#include "stdafx.h"
#include "CFilm.h"


CFilm::CFilm( CDatabase* pDatabase )
      :CRecordset(pDatabase)
{
	m_nFields = 4;
}
CFilm::~CFilm()
{
}

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

	RFX_Text(pFX, _T("Nazvanie"), s_FilmName, 100);
	RFX_Text(pFX, _T("Proizv"), s_WorkFilm, 30);
	RFX_Text(pFX, _T("Regis"), s_Regiessiuer, 100);
	RFX_Text(pFX, _T("Genre"), s_Genre, 25);
}

void CFilm::GetFilmInfo(CMapStringToPtr* ptrMap)
{
	CDatabase db;
	db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
	CRecordset RecSet( &db );// Набор записей	
try
{
	RecSet.Open(CRecordset::forwardOnly,"SELECT* FROM Film");//множество записей доступных только для чтения (::forwardOnly)
	do{		
		   RecSet.GetFieldValue(0, s_FilmName);
		   RecSet.GetFieldValue(1, s_WorkFilm);
		   RecSet.GetFieldValue(2, s_Regiessiuer);
		   RecSet.GetFieldValue(3, s_Genre);
			
             void *ptr = new CFilm(s_FilmName,s_WorkFilm,s_Regiessiuer,s_Genre);
			(*ptrMap)[s_FilmName] = ptr;
		    ptr = 0;
			delete ptr;
     RecSet.MoveNext();
	}
	while( !RecSet.IsEOF() );
	RecSet.Close();
	db.Close();
}
catch(CDBException* pException)
{
       AfxMessageBox( pException -> m_strStateNativeOrigin );
	   AfxMessageBox( pException -> m_strError );
	   pException -> Delete();

}
}

void CFilm::AddFilmInfo(CMapStringToPtr* ptrMap, CFilm* ptrFilm)
{
	      CDatabase db; 
	      db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
	      CFilm RecSet ( &db );
   try
     {
		 if(!RecSet.Open(CRecordset::snapshot,"SELECT* FROM Film"))		                              
										                          // Никакие другие мой ODBC не поддерживает(dynamic,dynset)
	     {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.s_FilmName = ptrFilm->s_FilmName;

	     RecSet.s_WorkFilm = ptrFilm->s_WorkFilm;
	     RecSet.s_Regiessiuer = ptrFilm->s_Regiessiuer;
	     RecSet.s_Genre = ptrFilm->s_Genre;

	     RecSet.Update();
	     RecSet.Close();// Закрытие набора записей 	
	     db.Close();//Закрытие БД


     }
     catch (CDBException* pException)
         {
	       AfxMessageBox( pException -> m_strStateNativeOrigin );
		   AfxMessageBox( pException -> m_strError );
	   	   pException -> Delete();
         }
		 void* ptr;
	if((*ptrMap).Lookup(ptrFilm->s_FilmName, ptr))
	{
		AfxMessageBox("Названия фильмов не могут повторяться !", MB_ICONINFORMATION);
		return;
	}
	else
	{
	 ptr = ((void *)ptrFilm);
	 (*ptrMap)[ptrFilm->s_FilmName] = ptr;
	}
}

void CFilm::DelFilmInfo(CMapStringToPtr* ptrMap, CString Str)
{
		 
		  int nItem = -1;
		  int I = 0;
		  
		  CDatabase db; 
	      db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
	      CFilm RecSet ( &db );
try
     {

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

		 do{
			 RecSet.Move(I);
			 I=1;
			 nItem ++ ;
		 }while(RecSet.s_FilmName != Str);

		 RecSet.Delete();
	     
		 if(!RecSet.IsDeleted())
		 {
			 AfxMessageBox("Нельзя удалить !");
		 }

		 void* ptr;
		 if((*ptrMap).Lookup(Str, ptr))//RemoveKey(Str)){}
		 {
		    
			CFilm* _film = ((CFilm*)ptr);
			delete _film;
			(*ptrMap).RemoveKey(Str);
		 }
		 else {AfxMessageBox("В архиве не найден фильм (НЕпредвиденная ошибка)");return;}
		// {AfxMessageBox("Удалено из Словаря", MB_ICONINFORMATION);}
		// else {AfxMessageBox("Не удаётся удалить из Словаря !", MB_ICONSTOP);}

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

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

void CFilm::EditFilmInfo(CMapStringToPtr* ptrMap, CString Str, CFilm* ptrFilm)
{
		  CDatabase db; 
	      db.Open("DBKino_MAccess", FALSE, FALSE, "ODBC;");
	      CFilm RecSet ( &db );
		  int nItem = -1;
		  int I = 0;

   try
     {
		 if(!RecSet.Open(CRecordset::snapshot,"SELECT* FROM Film"))		                              
	     {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;}

         do{
			 RecSet.Move(I);
			 I=1;
			 nItem ++ ;
		   }while(RecSet.s_FilmName != Str);

		 RecSet.Edit();
         RecSet.s_FilmName = ptrFilm->s_FilmName;
	     RecSet.s_WorkFilm = ptrFilm->s_WorkFilm;
	     RecSet.s_Regiessiuer = ptrFilm->s_Regiessiuer;
	     RecSet.s_Genre = ptrFilm->s_Genre;

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

     }
     catch (CDBException* pException)
         {
	       AfxMessageBox( pException -> m_strStateNativeOrigin );
		   AfxMessageBox( pException -> m_strError );
	   	   pException -> Delete();
         }
		 void* ptr;
		 if((*ptrMap).Lookup(Str, ptr))//RemoveKey(Str)){}
		 {
		    
			CFilm* _film = ((CFilm*)ptr);
			delete _film;
			(*ptrMap).RemoveKey(Str);
		 }
		 else {AfxMessageBox("В архиве не найден фильм (НЕпредвиденная ошибка)");return;}
	 //{AfxMessageBox("Удалено из Словаря для Записи Новых Значений", MB_ICONINFORMATION);}
	 //else {AfxMessageBox("Не удаётся удалить из Словаря для Записи Новых Значений !", MB_ICONSTOP);}
	 ptr = ((void *)ptrFilm);
	 (*ptrMap)[s_FilmName] = ptr;

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