//////////////////////////////////////////////// // TEMPLATE DI CLASSE .cpp // Programma: XXXX // Realizzato da: SofTech di Germinara Francesco // Via Maestra n. 2 - 10064 Pinerolo (TO) // Tel. Fax. 0121/33.90.15 www.germinara.it //////////////////////////////////////////////// // .CPP // Storia: // Data Creazione: // (c) 2002-2004 SofTech di Germinara Francesco //////////////////////////////////////////////// // Ultima Modifica al tracciato base 21/09/2002/ //////////////////////////////////////////////// #include "stdafx.h" #include ".h" #include ".h" //La Classe Applicazione extern theApp; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNAMIC(, CRecordset) ::(CDatabase* pdb) : CRecordset(pdb) { //Inizializzazione dei campi, del numero di campi //e del tipo di gestione del database m_nFields = ; m_nDefaultType = dynamic; //dynaset m_pDB=pdb; //Assegno il puntatore al database aperto //Lunghezze dei campi della tabella } //Connessione con il database CString ::GetDefaultConnect() { //Apre la connessione stabilita con il database return _T(m_pDB->GetConnect()); } //Connessione con la tabella CString ::GetDefaultSQL() { //Nessuna operazione iniziale return _T(""); } //Funzione per interscambio dati da/verso tabella del DB void ::DoFieldExchange(CFieldExchange* pFX) { pFX->SetFieldType(CFieldExchange::outputColumn); } //ESPORTA IN FILE ASCII void ::Export(CProgressCtrl *progBar=NULL){ long nrec=0L; CString fit; //Definizione dei nomi dei files CString nFile,msg; char dati[1001]; FILE *m_idFile; bool FileIsOpen; nFile=theApp.bseInfo.m_strPathExp; nFile+=".EXP"; Open(CRecordset::dynamic,"SELECT * FROM ",CRecordset::none); if(!IsOpen()){ AfxMessageBox("Impossibile aprire la tabella !"); return; } //Apertura del file ascii m_idFile=fopen(nFile,"w+"); if(m_idFile==NULL){ //Non c'e', visualizzo errore. msg.Format("Errore: Impossibile generare il file [%s].",nFile); AfxMessageBox(msg); FileIsOpen=false; }else FileIsOpen=true; while(!IsEOF()&&FileIsOpen){ if(progBar!=NULL) progBar->StepIt(); fputs(dati,m_idFile); fputs("\n",m_idFile); MoveNext(); } Close(); //Chiudo File ASCII if(FileIsOpen) fclose(m_idFile); } //IMPORTA IL FILE ASCII void ::Import(CProgressCtrl *progBar){ long nrec=0L; CString fit; //Definizione dei nomi dei files CString nFile,msg; char dati[1001]; char *result; FILE *m_idFile; bool FileIsOpen; int pos=0; nFile=theApp.bseInfo.m_strPathImp; nFile+=".EXP"; //Apertura del file ascii in lettura m_idFile=fopen(nFile,"r"); if(m_idFile==NULL){ //Non c'e', visualizzo errore. msg.Format("Errore: Impossibile leggere il file [%s].",nFile); AfxMessageBox(msg); FileIsOpen=false; }else FileIsOpen=true; while(FileIsOpen){ if(progBar!=NULL) progBar->StepIt(); result=fgets(dati,999,m_idFile); if(result==NULL) break; fit=(const char *)dati; pos=0; Insert( ); } //Chiudo File ASCII if(FileIsOpen) fclose(m_idFile); } long int ::Count(CString filtro){ CWaitCursor wait; long nrec=0L; int nOldFiled=m_nFields; m_nFields=1; CString qry; qry="SELECT COUNT(*) FROM "; if(filtro!="") qry+=filtro; Open(CRecordset::dynamic,qry,CRecordset::none); //forwardOnly if(!IsOpen()){ AfxMessageBox("Impossibile aprire la tabella !"); }else{ Close(); } m_nFields=nOldFiled; return nrec; } //Controlla se esiste il codice specificato, se esiste carica i dati //nelle rispettive variabili int ::LoadDati(){ int sts=0; CString qry; qry="SELECT * FROM WHERE Open(CRecordset::dynamic,qry,CRecordset::none); if(!IsOpen()){ AfxMessageBox("Impossibile aprire la tabella !"); sts=RC_ERR; //Errore } if(IsEOF()){ //NON TROVATO sts=RC_NO; }else{ //Variazione dati Edit(); sts=RC_SI; } Close(); return(sts); } //Immissione dati int ::Insert( ){ int sts=RC_SI; CString qry; qry="SELECT * FROM WHERE Open(CRecordset::dynamic,qry,CRecordset::none); if(!IsOpen()){ AfxMessageBox("Impossibile aprire la tabella !"); sts= RC_ERR; //Errore } if(IsEOF()){ //ESISTE ? sts=RC_NO; AddNew(); }else{ Edit(); sts=RC_SI; } //Assegno il valore ai vari campi //Gestione delle eccezioni try{ Update(); }catch( CDBException* e ){ AfxMessageBox("Errore su Update ()\n"+e->m_strError,MB_ICONEXCLAMATION ); e->Delete(); } Close(); return(sts); } //Cancellazione Singolo Dato int ::DeleteRec(){ int sts=RC_SI; CString qry; qry="SELECT * FROM WHERE Open(CRecordset::dynamic,qry,CRecordset::none); if(!IsOpen()){ AfxMessageBox("Impossibile aprire la tabella !"); sts= RC_ERR; //Errore } if(IsEOF()){ //esiste ? AfxMessageBox("Impossibile cancellare. Dato non presente!"); sts=RC_NO; }else{ //Gestione delle eccezioni try{ Delete(); }catch( CDBException* e ){ AfxMessageBox("Errore su Delete ()\n"+e->m_strError,MB_ICONEXCLAMATION ); e->Delete(); } } Close(); return(sts); } //Cancello tutti i dati int ::DeleteAll(){ long nrec=0L; Open(CRecordset::dynamic,"SELECT * FROM ",CRecordset::none); if(!IsOpen()){ AfxMessageBox("Impossibile aprire la tabella !"); return RC_ERR; } //Conto il numero di record while(!IsEOF()){ //Gestione delle eccezioni try{ Delete(); }catch( CDBException* e ){ AfxMessageBox("Errore su DeleteAll () \n"+e->m_strError,MB_ICONEXCLAMATION ); e->Delete(); } MoveNext(); //Vado sul record successivo } Close(); return RC_SI; } //Inserisce i record nella listview int ::MakeList(CListCtrl *m_Listview,qtHead *m_inttab,CProgressCtrl *progBar,CString filtro){ LV_ITEM lvi; lvi.mask=LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; lvi.iSubItem=0; CString clausola; int nrec=0; clausola="SELECT * FROM "; if(filtro!="") clausola+=filtro; //Controllo eventuale ordinamento dati int orderby=m_inttab->getorder(); switch(orderby){ case 0 : clausola=clausola+" ORDER BY "; break; default: clausola=clausola+" ORDER BY "; break; } int ascend=m_inttab->gettipord(); if(ascend == 1) //Decrescente clausola=clausola+" DESC"; Open(CRecordset::dynamic,clausola,CRecordset::none); if(!IsOpen()){ AfxMessageBox("Impossibile aprire la tabella !"); return 0; } //Inserisco dati dei singoli record m_Listview->DeleteAllItems(); nrec=0; while(!IsEOF()){ if(progBar!=NULL) progBar->StepIt(); lvi.iItem=nrec; lvi.pszText=""; lvi.cchTextMax=5; lvi.lParam = (LPARAM) nrec; lvi.iImage = 0; m_Listview->InsertItem(&lvi); nrec++; MoveNext(); } Close(); return nrec; } //Inserisce i record nella listview Virtuale int ::GetRecordForDispInfo(CListCtrl *m_FG,LVITEM* pItem){ if(pItem->iSubItem == 0){ //Solo al cambio del record leggo //dati dalla tabella MoveFirst(); Move(pItem->iItem); if(!IsEOF()){ //pItem->iImage = atoi(xxx); switch(pItem->iSubItem){ //campo da aggiornare } } }else{ switch(pItem->iSubItem){ //campo da aggiornare } } return 0; } //Imposta Recordset int ::OpenRecordSet(qtHead *m_inttab,CString filtro){ CString clausola; clausola="SELECT * FROM "; if(filtro!="") clausola+=filtro; //Controllo eventuale ordinamento dati int orderby=m_inttab->getorder(); switch(orderby){ case 0 : clausola=clausola+" ORDER BY "; break; default: clausola=clausola+" ORDER BY "; break; } int ascend=m_inttab->gettipord(); if(ascend == 1) //Decrescente clausola=clausola+" DESC"; if(CanBookmark()) Open(CRecordset::dynamic,clausola,CRecordset::useBookmarks); else Open(CRecordset::dynamic,clausola,CRecordset::none); //useBookmarks if(!IsOpen()){ AfxMessageBox("Impossibile aprire la tabella !"); return RC_ERR; //Errore } return RC_SI; //OK } ///////////////////////////////////////////////////////////////////////////// // Diagnostica #ifdef _DEBUG void ::AssertValid() const { CRecordset::AssertValid(); } void ::Dump(CDumpContext& dc) const { CRecordset::Dump(dc); } #endif //_DEBUG //Inserisce i record nella ultimateGrid int ::MakeList(CUGCtrl *m_ugCtrl,qtHead *m_inttab,CProgressCtrl *progBar,CString filtro){ CString despro; CString fitQta; CString clausola; int sts=0; long nrec=0; clausola="SELECT * FROM "; if(filtro!="") clausola+=filtro; //Controllo eventuale ordinamento dati int orderby=m_inttab->getorder(); switch(orderby){ case 0 : clausola=clausola+" ORDER BY "; break; default: clausola=clausola+" ORDER BY "; break; } int ascend=m_inttab->gettipord(); if(ascend == 1) //Decrescente clausola=clausola+" DESC"; Open(CRecordset::dynamic,clausola,CRecordset::none); if(!IsOpen()){ AfxMessageBox("Impossibile aprire la tabella !"); return 0; } //Inserisco dati dei singoli record long int nRows=m_ugCtrl->GetNumberRows(); for(long j=0; j< nRows; j++) m_ugCtrl->DeleteRow(j); m_ugCtrl->SetNumberRows(0); nrec=0; while(!IsEOF()){ if(progBar!=NULL) progBar->StepIt(); m_ugCtrl->AppendRow(); nrec++; MoveNext(); } Close(); return nrec; } //Immissione dati int ::Insert( & tmp){ int sts=RC_SI; CString qry; //aggiungere tmp. ai campi della chiave qry="SELECT * FROM WHERE Open(CRecordset::dynamic,qry,CRecordset::none); if(!IsOpen()){ AfxMessageBox("Impossibile aprire la tabella !"); sts= RC_ERR; //Errore } if(IsEOF()){ //ESISTE ? sts=RC_NO; AddNew(); }else{ Edit(); sts=RC_SI; } //Assegno il valore ai vari campi //Gestione delle eccezioni try{ Update(); }catch( CDBException* e ){ AfxMessageBox("Errore su Update ()\n"+e->m_strError,MB_ICONEXCLAMATION ); e->Delete(); } Close(); return(sts); } //Realizzato in modo automatico con MKCTab (c) SofTech di Francesco Germinara 2002