Você está na página 1de 3

https://groups.google.com/forum/#!

topic/publicesvfoxpro/6suo4OConUo%5B76-100%5D

No le veo ninguna necesidad en crear un COM o DLL si estas desarrollando en VFP y


el tiene todo lo necesario para manipular los datos, en que casos crees que es
necesario? hablando de datos!! si voy a compartir con otra aplicaci�n usaria XML,
JSON, y en el peor de los casos XLS, jeje

Es muy cierto no puedes pasar como un par�metro un cursor!!

Ahora bien, creo que el problema se resuelve entendiendo el alcance que va a tener
el cursor devuelto por la clase, el modelo o capa, como quieran llamarle.

No se a que te refieres con acoplar o compartir datos entre las capas, la capa de
negocios le solicita a la capa de datos la informaci�n, entonces la capa de datos
devuelve en mi caso un Cursor, el cual no tengo que compartir ni pasar, si no
solamente utilizar porque ya lo tengo en memoria, si fuera un objeto entonces si
tengo que andarlo pasando posiblemente entre capas para generarlo, pero esa es la
ventaja que tiene VFP al usar cursores, y por ejemplo en que momento podr�as tener
problemas como comentas que te puede pasar factura? recordar que estamos
desarrollando en VFP.

Ejemplo: El usuario solicita el registro ID = 10 de la tabla Personas, este se


encuentra en un servidor MariaDb donde esta la base de datos, entonces lo que hago
es utilizar mi capa de acceso a datos que esta contenida en un PRG para que me
devuelva el registro que esta solicitando el usuario.

En mi caso uso FoxyDb como una capa intermedia entre VFP y el servidor de datos, lo
que me permite poder cambiar entre MariaDb, Mysql y FireBird con solo cambiar una
propiedad de la librer�a a diferencias de usar SPT directamente sobre un solo
servidor de datos como hacen algunos, a dem�s de un c�digo mas simple en mi capa de
datos, ejemplo

* Defino mi clase de acceso al Servidor de datos, en este caso voy a usar MariaDb
thisform.oDb = NewObject("FoxyDb","data\FoxyDb.prg")
thisform.oDb.engine = thisform.oDb.MariaDb
* Defino propiedades de Conexi�n y dejo listo para cuando quiera conectarme
* etc
..
..
* Abro el formulario con sesi�n privada de datos donde el usuario determino la
Persona ID = 10
* Creo mi Objeto de datos para obtener de la tabla Personas
thisform.oPersonas = NewObject("personas","data\personas.prg")
* Me traigo el registro solicitado de mi objeto de datos
thisform.oPersonas.Persona(thisform.oDb,10)
* Y obtengo el cursor con el registro solicitado
Select Personas

Si tengo la opci�n de editar el registro entonces una vez que el usuario presiono
el bot�n guardar solo tengo que decirle a mi clase de datos o capa de datos que
guarde.
thisform.oPersonas.Guardar(thisform.oDb,"persona")

Si mis datos devueltos fueran objetos entonces mi Cursor Personas seria el objeto y
los campos serian las propiedades, al final del d�a es lo mismo, pero en VFP un
cursor tiene mucho mas ventajas que crear un objeto a partir de los datos, para
empezar siempre vas a obtener un cursor que tienes que transformar en un objeto,
ah� ya es realizar un proceso mas, luego identificar los cambios que haces en un
objeto o propiedad de un objeto es mas complicado, que usar las funciones nativas
de VFP que tiene para la manipulaci�n de un cursor.

Ejemplo resumido de la clase datos Personas

Define clase Personas as custom


* Propiedades
...
fields = "id, nombre, paterno, materno, ....."
...

FUNCTION Persona
lparameter __oDb as Object, __id as Integer, __cursorName as Character
local __commandSql, ... ... ...
* Validar Par�metros
...
....
* Consulta
__commandSql = "Select " + this.fields + " from personas where id = ?
__id"
if __oDb.Query(__commandSql,__cursorName)
return .t.
else
return .f.
endif
ENDFUNC

FUNCTION Personas_listado
....
ENDFUNC

FUNCTION Guardar()
lparameter __oDb as Object, __cursorName as Character
* Verificar si hay Cambios
if not __oDb.CursorChange(__cursorName)
return .f.
endif
* Actualizar
if not __oDb.Update(__cursorName)
return .f.
endif
* Aplicar
if __oDb.Commit()
return .t.
else
return .f.
endif
ENDFUNC

ENDDEFINE

En mi caso por cada tabla tengo una clase datos, o por cada modulo seg�n sea el
caso, a dem�s aprovecho las ventajas de la Programaci�n orientada a objetos (POO) y
tengo una clase gen�rica donde tengo la funci�n Guardar() que heredo a la clase
Personas, imaginen repetir c�digo en cada clase seria de locos, as� que hago el
mejor uso posible de la POO.

saludos
Antonio Meza

Você também pode gostar