Utilizar MSFlexGrid en Visual C++ con DAO

Al 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 pre-diseñ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:

  • Clic Derecho sobre el Dialogo en tiempo de diseño.
  • Clic sobre Insert ActiveX
  • Navegar y localizar Microsoft FlexgGrid Control 6.0 click en Insert
  • Ahora a darle propiedades como cualquier otro controlal estilo Visual Basic.

flexgrid-dao.gif
MSFlexGrid usado en aplicaciones Visual C++


MicroLogicDataBaseControl



Code: Seleccionar todo
  1. class MicroLogicDataBaseControl

  2. {

  3.    //...

  4.  

  5. };



La Clase ‘CMsFlexGrid’ quedara como sigue:


Code: Seleccionar todo
  1. class CMSFlexGrid : public CWnd

  2. {

  3. protected:

  4.    DECLARE_DYNCREATE(CMSFlexGrid)

  5. public:

  6.    CLSID const& GetClsid()

  7.    {

  8.       static CLSID const clsid

  9.          = { 0x6262d3a0, 0x531b, 0x11cf,

  10.          { 0x91, 0xf6, 0xc2, 0x86, 0x3c, 0x38, 0x5e, 0x30 } };

  11.       return clsid;

  12.    }

  13.  

  14.    virtual BOOL Create(LPCTSTR lpszClassName,

  15.       LPCTSTR lpszWindowName, DWORD dwStyle,

  16.       const RECT& rect,

  17.       CWnd* pParentWnd, UINT nID,

  18.       CCreateContext* pContext = NULL)

  19.    {

  20.       return CreateControl(GetClsid(), lpszWindowName,

  21.          dwStyle, rect, pParentWnd, nID);

  22.    }

  23.  

  24. // Operations

  25. public:

  26.    long GetRows();

  27.    void SetRows(long nNewValue);

  28.    long GetCols();

  29.    //...

  30.  

  31.  

  32.    void OLEDrag();

  33. };



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


Code: Seleccionar todo
  1. void CDB_DAO_MiniSoftDmDlg::bpReadAllRecorset()

  2. {

  3.  

  4.    SYSTEMTIME       mTime;

  5.    CWaitCursor      mCursor;

  6.  

  7.  

  8.    // Hay que limpiar los valores del ListView

  9.    // LstReporte.DeleteAllItems( );

  10.  

  11.    // Preguntamos si tiene elementos....

  12.    if( mDaoDataControl.RecordsetIsEmpty( ) )

  13.       return;

  14.  

  15.    

  16.    char & nbsp; szTmpString[20];

  17.    long   lngInd = 0;

  18.  

  19.  

  20.    // Con este truco se puede saber cuantos registros hay en el

  21.    // Recordset... sin antes buscar... con Ciclos..

  22.    mDaoDataControl.GetRecordset()->MoveLast();

  23.    FlexR ejilla.SetRows( mDaoDataControl.GetRecordset()->GetRecordCount() + 1 );

  24.  

  25.  

  26.    // Nos desplazmos hacia el 1er Registro

  27.    mDaoDataControl.GetRecordset()->MoveFirst( );

  28.  

  29.  

  30.    //mTime.GetCurrentTime( );

  31.    GetLocalTime( &mTime );

  32.    

  33.    // Ahora un ciclo para determianar cuantos Registros

  34.    // existen y leerlos directamente.....

  35.    while( ! mDaoDataControl.GetRecordset()->IsEOF( ) )

  36.    {

  37.       // Algo será !!

  38.       sprintf( szTmpString, "%03ld", lngInd+1 );

  39.  

  40.       // Insertar los valores...

  41.       FlexRejilla.SetTextMatrix( 1+lngInd, 0 , szTmpString );

  42.       FlexRejilla.SetTextMatrix( 1+lngInd, 1

  43.          , mDaoDataControl.GetField_AsString( Field_Codigo ) );

  44.  

  45.       FlexRejilla.SetTextMatrix( 1+lngInd, 2

  46.          , mDaoDataControl.GetField_AsString( Field_Datos ) );

  47.  

  48.       sprintf( szTmpString, "%ld"

  49.          , mDaoDataControl.GetField_AsInteger( Field_AnioNac ) );

  50.  

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

  52.  

  53.       sprintf( szTmpString, "%d"

  54.          , mTime.wYear-mDaoDataControl.GetField_AsInteger( Field_AnioNac ) );

  55.  

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

  57.  

  58.       // Sumar un Registro...

  59.       lngInd++;

  60.  

  61.       // Ahora buscamos el Siguiente Registro...

  62.       mDaoDataControl.GetRecordset()->MoveNext( );

  63.    };

  64. };



Para Añadir un Registro a la Tabla tendremos:


Code: Seleccionar todo
  1. void CDB_DAO_MiniSoftDmDlg::OnAddRow()

  2. {

  3.       CDB_DAO_Aniadir   DlgNuevo;

  4.       if( DlgNuevo.DoModal()==IDOK )

  5.       {

  6.  

  7.          if( mDaoDataControl.GetRecordset()->CanAppend( ) )

  8.          {

  9.             // Añadir nuevo Registro

  10.             mDaoDataControl.GetRecordset ()->AddNew( );

  11.  

  12.             mDaoDataControl.SetField_AsString( Field_Codigo

  13.                    ;, DlgNuevo.FldCodigo );

  14.  

  15.             mDaoDataControl.SetField_AsString( Field_Datos

  16.                , DlgNuevo.FldDatos );

  17.  

  18.             mDaoDataControl.SetField_AsString( Field_AnioNac

  19.                , DlgNuevo.FldAnioNac );

  20.  

  21.             mDaoDataControl.SetField_AsString( Field_Observs

  22.                , DlgNuevo.FldObserv );

  23.  

  24.  

  25.             // Guardar los Cambios Hechos....

  26.             mDaoDataControl.GetRecordset ()->Update( );

  27.  

  28.             // Ahora mostramos todo...

  29.             CDB_DAO_MiniSoftDmDlg::OnLis tar( );

  30.          }

  31.       }

  32. };

Archivos Adjuntos

Otros Artículos en esta sección

  • Separador de controles para formularios MFC
    Es un control que nos permite mantener ordenado nuestros diálogos mediante lineas divisoras. No hay una variedad de controles para diálogos MFC, pero con esto puedes poner la diferencia.
    Por: ivancp,2004-09-20
  • Shell para Simulación
    Shell para Simulación es una herramienta donde el usuario de manera interactiva puede modelar sistemas reales y definir sus características. La herramienta está orientada a la simulación de sistemas dinámicos y estocásticos que cambian de manera discreta.
    Por: nazg,2006-03-18
  • Juego de Ajedrez en Visual C++
    Es un tutorial que te enseña como programar un juego de ajedrez en Visual C++ paso a paso, empezando por dibujar el tablero hasta mover cada una de las piezas.
    Por: ivancp,2004-03-14
¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:
foro deVisual C++ »