![]() |
![]() |
|
|
|
|
|
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
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( );
}
}
};
![]() |
![]() |
|||
|
||||
![]() |
![]() |