FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Contribuci贸n al foro experiencia sobre Bases.mdb
Posts: 115
Joined: Sat Mar 07, 2009 09:36 PM

Contribuci贸n al foro experiencia sobre Bases.mdb

Posted: Tue Jul 10, 2012 10:04 AM

////////////////////////////////////////////////////////////////////////////
// //
// Modulo_: Principal //
// Autor
_: Ing.Bellucci Juan Carlos //
// Bases
: Acces xxx.mdb //
// Tipo
____: Orientado a Objetos //
// //
////////////////////////////////////////////////////////////////////////////

#Include "Fivewin.ch"
#Include "Ado.ch"
#include 'FILEIO.CH'

Static oCone

//////////////////////////////////////////////////////////////////
// Ejemplo de uso
//////////////////////////////////////////////////////////////////

// xBase = nombre de su base de datos que elija

// CreaBases("xBase") // se creara una base.mdb de datos en la carpeta data

// Si se trata de una base que tiene pasword

//
// oCone = Conexion tipo dsn para la base
// AbreBase funcion de 2 parametros
// 1 = nombre de la base
// 2 = clave de no existir colocar ""

// oCone := AbreBase("Caja","rm1952" )
// Una vez abierta la base se crean todas las tablas que desee pero
// en forma individual obvio

// CreaArticulos( oCone ) // creamos la tabla de articulos

// Esta funcion ademas permite abrir una base existente y agregar o
// borrar tablas. solo hay que colocar la base en la carpeta data.

// agregar al su sistema el modulo funci.c de libre distribucion.

//--------------------------------------------------------------------------//
// Method Principal( )
//--------------------------------------------------------------------------//
Function Main()
Local Clave := "su_clave"
Local cBase := "Archivo"

       Local Data1


       /////////////////////////////////////////////////////////
       // Primer paso Crear la Base
       /////////////////////////////////////////////////////////

       CrearLaBase(cBase) // esta funcion crea la base si no existe

       /////////////////////////////////////////////////////////
       // Segundo paso Abrir la Base para su uso
       /////////////////////////////////////////////////////////

       oCone := AbreBase(cBase,Clave )

       If Empty( oCone )
          MsgAlert(" No se Pudo Abrir la Base de Datos..."," Error ")
          Return( Nil )
       EndIf

       /////////////////////////////////////////////////////////
       // Tercer Crear las tablas para su uso
       /////////////////////////////////////////////////////////

       CreaArticulos( oCone )  // aqui puede poner todas tablas
                                          // que desea crear.

       /////////////////////////////////////////////////////////
       // Cuarto paso Abrir la tabla para su uso
       /////////////////////////////////////////////////////////

       Data1 := Usar(oCone,"Select * from Articulos where "+;
                           "Borrado <> 'S' Order by Articulo ;"

       If !Empty( Data1 )
           xBrowse( Data1 )
           Data1:Close()
       EndIf
       /////////////////////////////////////////////////////////
       // Quinto Cierre la Conexion
       /////////////////////////////////////////////////////////

       oCone:Close()  // al finalizar el programa

       /////////////////////////////////////////////////////////

Return( Nil )
//--------------------------------------------------------------------------//
//--------------------------------------------------------------------------//
// Method CreaArticulos( oCone )
//--------------------------------------------------------------------------//
Static Function CreaArticulos( oCone )
Local Data1
Local oError
Data1:=tOleAuto():New("ADODB.RecordSet")
Data1:CursorLocation := adUseClient
Data1:CursorType := adOpenDynamic
Data1:LockType := adLockOptimistic
Data1:ActiveConnection := oCone
Data1:Source := "CREATE TABLE ARTICULOS(" + ;
" Registro COUNTER, " + ;
" Articulo TEXT(100), " + ;
" Fecha DATE, " + ;
" Descripcion TEXT(100)," + ;
" Marca TEXT(50), " + ;
" Color TEXT(50), " + ;
" Cantidad SINGLE, " + ;
" Bajas SINGLE, " + ;
" Valor SINGLE, " + ;
" Proveedor TEXT(100), " + ;
" Rubro TEXT(30), " + ;
" Borrado TEXT(1), " + ;
" Operador TEXT(30), " + ;
" OFecha DATE, " + ;
" OHora TEXT(5) )"
TRY
Data1:Open()

      CATCH oError
          Return( "" ) // Solo si Hay error
      END
    //-------------------//

Return( Nil )
//--------------------------------------------------------------------------//
// Esta Informacion esta a disposicion del foro de Fivewin.
// en agradecimiento a la gente de Fivetech que tanto hace por nosotros.
// Desde Argentina Buenos Aires Ciudad de Escobar Juan Carlos.
//--------------------------------------------------------------------------//

/////////////////////////////////////////////////////////////////////////////////////////////////////////
// este es el modulo funci.prg que debe ser compilado por separado.
/////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////
// //
// Modulo_: Funci.prg //
// Autor
_: Bellucci Juan Carlos //
// Bases
: Acces xxx.mdb //
// Tipo
____: Orientado a Objetos //
// //
////////////////////////////////////////////////////////////////////////////

#Include "Fivewin.ch"
#Include "Ado.ch"
#include 'FILEIO.CH'
//--------------------------------------------------------------------------//
// Este Modulo debe compilarse tal como esta he incluir en el proyecto
//--------------------------------------------------------------------------//
//--------------------------------------------------------------------------//
//--------------------------------------------------------------------------//
// Crea Base de Datos
//--------------------------------------------------------------------------//
Function CreaBases(cBase)
Local oCatalog
Local oTable
Local oColumn
Local oKey
cBase := Alltrim(cBase)+".mdb"
lMKDir("Data")
If !File(".\Data\"+cBase)
oCataLog := CreateObject("ADOX.Catalog")
oCataLog:Create("Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type = 4 ;Data Source=.\Data\"+cBase)
EndIf

Return( nil )
//--------------------------------------------------------------------------//
// Method Abre base de datos
//--------------------------------------------------------------------------//
Function AbreBase( cBase, cPass )
Local oBase
Local oErr
cBase := ".\Data\"+Alltrim(cBase)+".mdb"

       If !File(cBase)
            MsgStop("Ha Ocurrido Un Error...No Se Esta La Base de Datos..."," Error " )
            Return(Nil)
       EndIf

       Try 
          oBase := CreateObject( "ADODB.Connection" )
          oBase:ConnectionString := "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="+cBase+";Pwd=" + cPass
          oBase:Open()
       CATCH oErr
          MsgAlert(" No se Pudo Establecer la Conexion Con La Base De Datos..","Atencion")
          Return(Nil)
       END

Return( oBase )
//--------------------------------------------------------------------------//
// Method AbreTabla()
//--------------------------------------------------------------------------//
Function Usar(oCone,Consulta)
Local xData,oError
//--------------------------------------------------------------//
xData:=tOleAuto():New("ADODB.RecordSet")
xData:CursorLocation := adUseClient
xData:CursorType := adOpenDynamic
xData:LockType := adLockPessimistic
xData:ActiveConnection := oCone
xData:Source := Consulta
//--------------------------------------------------------------//
TRY
xData:Open()
CATCH oError
Return(Nil)
END
//--------------------------------------------------------------//
Return( xData )
//--------------------------------------------------------------------------//
//Method Ir Al Primer Registro
//--------------------------------------------------------------------------//
Function Primero(oData)
If oData:RecordCount > 0
oData:MoveFirst()
EndIf
Return( oData )
//--------------------------------------------------------------------------//
// Method Ir Al Registro Anterior
//--------------------------------------------------------------------------//
Function Anterior(oData)
If oData:RecordCount > 0
oData:MovePrevious()
If oData:Bof()
oData:MoveFirst()
EndIf
EndIf
Return( oData )
//--------------------------------------------------------------------------//
// Method Ir Al Registro Siguiente
//--------------------------------------------------------------------------//
Function Siguiente(oData)
If oData:RecordCount > 0
oData:MoveNext()
If oData:Eof()
oData:MoveLast()
EndIf
EndIf
Return( oData )
//--------------------------------------------------------------------------//
// Method Ir Al Ultimo Registro
//--------------------------------------------------------------------------//
Function Ultimo(oData)
If oData:RecordCount > 0
oData:MoveLast()
EndIf
Return( oData )
//--------------------------------------------------------------------------//

Posts: 226
Joined: Sun May 13, 2012 07:52 AM

Re: Contribuci贸n al foro experiencia sobre Bases.mdb

Posted: Wed Jul 11, 2012 06:13 PM

ola juan carlos

pregunta tonta...
microsoft access necesita tener instalado?
es m谩s r谩pido que los DBFs?

gracias

FWH2008 | xHarbour | BCC74 | SQLRDD
Posts: 115
Joined: Sat Mar 07, 2009 09:36 PM

Re: Contribuci贸n al foro experiencia sobre Bases.mdb

Posted: Wed Jul 11, 2012 06:33 PM

No es necesario tener instalado acces... si es necesario tener instalado ODBC Normalmente esta instalado con el paquete windows.

el tema de velocidad depende de la maquina y o el tipo de redes donde corra de todas maneras ado en mas rapido.

Posts: 115
Joined: Sat Mar 07, 2009 09:36 PM

Re: Contribuci贸n al foro experiencia sobre Bases.mdb

Posted: Wed Jul 11, 2012 06:35 PM

En la pr贸xima entrega : agregar - borrar - modificar y trabajar con xbrowse de manera segura usando un arreglo de memoria.

Posts: 3
Joined: Mon Oct 23, 2017 01:47 PM

Re: Contribuci贸n al foro experiencia sobre Bases.mdb

Posted: Fri Nov 29, 2019 03:44 PM

No teste que fiz aqui eu consigo conectar com o BD mas o "select * from table" sempre retorna vazio sendo que tenho 44332 registros o que pode ser ??

Continue the discussion