Mostrando entradas con la etiqueta tDatabase. Mostrar todas las entradas
Mostrando entradas con la etiqueta tDatabase. Mostrar todas las entradas

lunes, 19 de noviembre de 2007

tDataBase, usando tablas como objetos.


Puede que pienses que esto no tiene nada que ver con ADO, y en efecto directamente no tiene nada que ver con ADO. En una entrada anterior comentamos que para trabajar con ADO, era necesario conocer algo de SQL, lo que no compentamos es que tambien es necesario manejarse bien con la programación orientada a objetos (POO).


En FiveWin está incluida un clase que nos permite manjear las tablas DBF como objetos, eso nos permitiira por una parte probar y tomar soltura en el manejo de propiedades, metodos y ademas es una forma muy eficaz de trabajar.


Esta clase nos controla los bloqueos de registro, incorpora un buffer para no modificar directamente sobre el registro, controla si hay cambios en los datos editados, y muchas mas cosas, que nos llevaria bastante trabajo programar a mano.

Su uso es muy sencillo, y ahora veremos un pequeño ejemplo.


El primer paso, es crear el objeto (instanciar de la clase), abriremos una tabla, por ejemplo de proveedores

DBUseArea(.T.,'DBFCDX','PROVEEDOR','PROVEEDOR,.T.,.F.)

oDbf := TDataBase():New()

ya tenemos creado y funcional nuestro objeto oDbf, disponemos de todos los metodos necesarios para trabajar con una tabla (oDbf:Skip(), oDbf:GoTop(), oDbf:Save(), oDbf:Used(), ...), en la ayuda de fivewin encontrareis todos los metodos disponibles, y en la carpeta Source\clases, podeis consultar el código fuente y ver como funcina internamente.


Siguiendo con un proceso normal de altas y modificaciones de ficheros, el siguiente paso seria determinar si queremos añadir un registro, o editar el registro actual.

Si quermos hacer una alta, invocaremos el metodo Blank, que nos dejara el buffer de edición vacio y listo para ñadir un nuevo registro.

Por el contrario si queremos editar el registro actual, invocaremos el metodo Load, que cargara el contenido de los campos de la tabla, en el buffer de edición.


Acto seguido ya podemos visualizar, editar y modificar el contenido de los campos de nuestro objeto, y la forma de referirnos a los campos es nombre de nuestro objeto : nombre del campo.

@ 10,10 GET oDbf:Codigo

@ 12,10 GET oDbf:Nombre ....

cuando hayamos introducido todos nuestros datos, si queremos guardarlos actuaremos de la siguiente manera.

Comprobaremos si realmente se han modificado los datos, y para ello consultamos el valor de oDbf:Modified(), si nos devuelve verdadero, es que hay cambios.


Si el registro es una alta, en este momento crearemos el registro (hasta ahora hemos estado trabajando sobre un buffer temporal en memoria).

oDbf:Append()

y tanto si es una alta como una edición de un registro existente, grabaremos el contenido del buffer temporal a los campos de la tabla.

oDbf:Save()


Sencillo y potente, verdad?. Bueno pues ADO, funciona de una manera muy parecida, cambian los nombres de algunos metodos, pero en el fondo la filosofia de funcionamiento es la misma.


Aqui teneis algunos metodos con la misma funcionalidad tanto en tDatabase como en ADO


BielSys











Código fuente ejemplo mantenimiento ficha de proveedores usando tDatabase:
STATIC FUNCTION EdtPro(lAdd)

   LOCAL oDlg,oDbf,lSave:=.F.

   DEFAULT lAdd:=.F.

   Select Proveedores

   DATABASE oDbf

   DEFINE DIALOG oDlg RESOURCE "MANPROVE"



   IF lAdd

      oDbf:Blank()

   ELSE

      oDbf:Load()

   ENDIF

   oDlg:SetText('('+ProcName()+')'+IF(lAdd,' Añadir Proveedores',' Editar ficha proveedor'))



   REDEFINE GET oDbf:Codprov   ID 601 OF oDlg VALID {|oGet|Ajusta(oGet)} WHEN lAdd

   REDEFINE GET oDbf:Nombre    ID 602 OF oDlg

   REDEFINE GET oDbf:Nif       ID 603 OF oDlg

   REDEFINE GET oDbf:Dir1      ID 604 OF oDlg

   REDEFINE GET oDbf:Dir2      ID 605 OF oDlg

   REDEFINE GET oDbf:Cp        ID 606 OF oDlg

   REDEFINE GET oDbf:Provincia ID 607 OF oDlg

   REDEFINE GET oDbf:Tel1      ID 608 OF oDlg

   REDEFINE GET oDbf:Tel2      ID 609 OF oDlg

   REDEFINE GET oDbf:Movil     ID 610 OF oDlg

   REDEFINE GET oDbf:Fax       ID 611 OF oDlg

   REDEFINE GET oDbf:Percon    ID 612 OF oDlg



   REDEFINE BUTTON ID 1 OF oDlg ACTION (oDlg:End(), lSave := .T.) // OK

   REDEFINE BUTTON ID 2 OF oDlg ACTION (oDlg:End()) // Cancel



   ACTIVATE DIALOG oDlg CENTERED



   IF lSave .AND. oDbf:Modified()

      IF lAdd

         oDbf:Append()

      ENDIF

      oDbf:Save()

   ENDIF

RETURN NIL


_________________
Saludos desde Mallorca

Biel

Gabriel Maimó