Utilizar MSFlexGrid en Visual C++ con DAO
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.
MicroLogicDataBaseControl
- Code: Seleccionar todo
- class MicroLogicDataBaseControl
- {
- //...
- };
La Clase ‘CMsFlexGrid’ quedara como sigue:
- Code: Seleccionar todo
- 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á.
- Code: Seleccionar todo
- 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:
- Code: Seleccionar todo
- 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( );
- }
- }
- };
Tags: MFC,base de datos
Otros Artículos en esta sección
-
Este artículo muestra como implementar hilos/hebras con la clase CWinThread en forma sencilla. El ejemplo pone a prueba la rapidez de tres métodos de ordenamiento ejecutandolos simultáneamente.Es un control con el que puedes visualizar imágenes en formularios MFC, puede cargar Bitmaps de 16, 256 y 24 Bits.Puedes usar este control en tus aplicaciones Visual C++ para visualizar imágenes dentro de un formulario MFC o también en entornos derivados de CWnd.¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:
foro deVisual C++ »