Home   Artículos   Recursos   Foros 
 

Utilizar MSFlexGrid en Visual C++ con DAO

Enviado por:

El citar acceso completo, nos referimos a que podamos navegar en la base de datos en modo de lectura y escritura, pues no basta con leer los datos también es necesario actualizarlos. Aquí un modo sencillo de uso con la clase base MicroLogicDataBaseControl.

Un modo sencillo de acceder a las bases de datos de escritorio es usando un motor de base de datos como Data Acces Object (DAO). Visual C++ no tiene controles para realizar esta labor, pero si tiene clases implementadas, y mucha complejidad para manipularlas. Mientras mas código fuente tenga nuestro programa mayor control tendremos sobre determinadas tareas, no necesitamos necesariamente un control prediseñado, nosotros podemos crearlo y controlarlo con mucha facilidad. Esto se logra después de un tiempo de mucha práctica y dedicación.

Para desplegar los resultados de nuestra tabla en este caso usaremos un control ActiveX: MSFlexgGrid. Para poder utilizar este control debemos hacer lo siguiente en nuestro proyecto:

 

 Aplicación en curso
Aplicación en curso

 

Código Fuente :

class MicroLogicDataBaseControl
{
   //...

};

La Clase ‘CMsFlexGrid’ quedara como sigue: 

class CMSFlexGrid : public CWnd
{
protected:
   DECLARE_DYNCREATE(CMSFlexGrid)
public:
   CLSID const& GetClsid()
   {
      static CLSID const clsid
         = { 0x6262d3a0, 0x531b, 0x11cf,
         { 0x91, 0xf6, 0xc2, 0x86, 0x3c, 0x38, 0x5e, 0x30 } };
      return clsid;
   }

   virtual BOOL Create(LPCTSTR lpszClassName,
      LPCTSTR lpszWindowName, DWORD dwStyle,
      const RECT& rect,
      CWnd* pParentWnd, UINT nID,
      CCreateContext* pContext = NULL)
   {
      return CreateControl(GetClsid(), lpszWindowName,
         dwStyle, rect, pParentWnd, nID);
   }

// Operations
public:
   long GetRows();
   void SetRows(long nNewValue);
   long GetCols();
   //...


   void OLEDrag();
};

Entonces al querer hacer un Listado el Sgte Código te servirá.

void CDB_DAO_MiniSoftDmDlg::bpReadAllRecorset()
{

   SYSTEMTIME       mTime;
   CWaitCursor      mCursor;


   // Hay que limpiar los valores del ListView
   // LstReporte.DeleteAllItems( );

   // Preguntamos si tiene elementos....
   if( mDaoDataControl.RecordsetIsEmpty( ) )
      return;

   
   char & nbsp; szTmpString[20];
   long   lngInd = 0;


   // Con este truco se puede saber cuantos registros hay en el
   // Recordset... sin antes buscar... con Ciclos..
   mDaoDataControl.GetRecordset()->MoveLast();
   FlexR ejilla.SetRows( mDaoDataControl.GetRecordset()->GetRecordCount() + 1 );


   // Nos desplazmos hacia el 1er Registro
   mDaoDataControl.GetRecordset()->MoveFirst( );


   //mTime.GetCurrentTime( );
   GetLocalTime( &mTime );
   
   // Ahora un ciclo para determianar cuantos Registros
   // existen y leerlos directamente.....
   while( ! mDaoDataControl.GetRecordset()->IsEOF( ) )
   {
      // Algo será !!
      sprintf( szTmpString, "%03ld", lngInd+1 );

      // Insertar los valores...
      FlexRejilla.SetTextMatrix( 1+lngInd, 0 , szTmpString );
      FlexRejilla.SetTextMatrix( 1+lngInd, 1
         , mDaoDataControl.GetField_AsString( Field_Codigo ) );

      FlexRejilla.SetTextMatrix( 1+lngInd, 2
         , mDaoDataControl.GetField_AsString( Field_Datos ) );

      sprintf( szTmpString, "%ld"
         , mDaoDataControl.GetField_AsInteger( Field_AnioNac ) );

      FlexRejilla.SetTextMatrix( 1+lngInd, 3 , szTmpString );

      sprintf( szTmpString, "%d"
         , mTime.wYear-mDaoDataControl.GetField_AsInteger( Field_AnioNac ) );

      FlexRejilla.SetTextMatrix( 1+lngInd, 4 , szTmpString );

      // Sumar un Registro...
      lngInd++;

      // Ahora buscamos el Siguiente Registro...
      mDaoDataControl.GetRecordset()->MoveNext( );
   };
};

Para Añadir un Registro a la Tabla tendremos:

void CDB_DAO_MiniSoftDmDlg::OnAddRow()
{
      CDB_DAO_Aniadir   DlgNuevo;
      if( DlgNuevo.DoModal()==IDOK )
      {

         if( mDaoDataControl.GetRecordset()->CanAppend( ) )
         {
            // Añadir nuevo Registro
            mDaoDataControl.GetRecordset ()->AddNew( );

            mDaoDataControl.SetField_AsString( Field_Codigo
                   ;, DlgNuevo.FldCodigo );

            mDaoDataControl.SetField_AsString( Field_Datos
               , DlgNuevo.FldDatos );

            mDaoDataControl.SetField_AsString( Field_AnioNac
               , DlgNuevo.FldAnioNac );

            mDaoDataControl.SetField_AsString( Field_Observs
               , DlgNuevo.FldObserv );


            // Guardar los Cambios Hechos....
            mDaoDataControl.GetRecordset ()->Update( );

            // Ahora mostramos todo...
            CDB_DAO_MiniSoftDmDlg::OnLis tar( );
         }
      }
};

 

Descargas

Acerca del Author

Nombre de usuario: MicroLogic©Software
Blog/URL:
Fecha de envío: 2005-04-20
Ultima Actualización:
Visualizaciones: 7518
Nedstat Basic - Web site estadisticas gratuito
El contador para sitios web particulares