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
-
Aquí un programa que espero les guste.. es un programa conocido que usa los conceptos básicos de árboles, nodos.Esta es una manera sencilla de hacer que tus aplicaciones no desentonen con el entorno de Windows XP.Este un programa que escribí en Visual C++ en un curso de Investigación Operativa.¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:
foro deVisual C++ »