Vous êtes sur la page 1sur 8

Framework para Visual FoxPro, Utiliza SQLServer, MySQL, PostgreSQL y

Oracle como su Motor de Base de Datos.


Por medio de la presente quiero hacerles llegar mis ms cordiales saludos y a la ves
darles a conocer de mi nueva versin Framework para Visual Fox Pro, Totalmente
fcil y sencillo.
Somos muchos los programadores que hemos venido desarrollando aplicacin con la
base nativa de Visual FoxPro; a mi particularmente nunca me gusto Visual FoxPro como motor
de base de datos ya que es limitado pero como interfaz de usuario es excelente, si uno quiere
orientarse a realizar aplicacin remotas o de entorno web es all donde surgen los
inconvenientes de limitacin, no se si este equivocado pero eso es mi punto de vista.
La gran interrogante a todo esto es. Si migro mi base de datos de VFP a otro motor de base de
datos como (SQLServer, MySQL, PostgreSQL y Oracle), tendr que cambiar la forma de
programar, djame decirte que no lo hars. Porque he desarrollado un Framework que permite
trabajar con cualquier base de datos, lo ms importante es que no vas a tener que modificar ni
una lnea de tu cdigo.
La nueva versin no ha cambio a simple vista. El Framework trae muchas mejoras, entre una de
ellas y la que ms interesa a todos los desarrolladores es el control de la desconexin a la base
de datos, el motivo puede ser como la falla de la red interna o si se est trabajando
remotamente la cada del internet. El Framework intentara conectarse en hasta en 10 intentos,
de esta manera impediremos que el usuario no pierda la informacin y/o el proceso que esta
realizando.
Bueno se ha creado 5 propiedades fundamentales y un mtodo que hay que tener en cuenta
PROPIEDADES:
- UTILIZARTRANSA
Valor ha utilizar .T. o .F.; Si el valor es .T., se abre la transaccin en Visual FoxPro y en el
motor de la base de datos, cuando se utiliza el mtodo SQLCOMANDO. Inicialmente la
propiedad esta en .F.
- CLAVE PRIMARIA
Aqu ponemos la llave primaria de nuestra tabla que queremos trabajar o el campo que
har referencia para la actualizacin de los datos.

- VALIDACAMPOTABLASQL
Valor ha utilizar .T. o .F.; Compara la tabla del SQL con el cursor que se ha utilizado.
Ejemplo si tengo un cursor con ms campos de la tabla principal solo toma los campos
que corresponde a la tabla que se quiere actualizar.
- VALIDAIMG
Valor ha utilizar .T. o .F.; Si la tabla tiene imgenes, esto es muy importante para MySQL
y PostgreSQL.
- VALIDARFECHA
Valor ha utilizar .T. o .F.; Cuando queremos guardar fechas vaca en MySQL no permite
enviar error como si estuviramos mandando valores .null. a un campo de tipo fecha,
pero para SQLServer no hay problema.
MTODO:
- SQLCOMANDO
Sus parmetros (cAccion, cTablaSqlCur, cTablaSql, CondUpdate) cAccion = N nuevo;
A Actualiza; E Eliminar.
Thisform.sqlconector1.Execute(Select * from Tabla ,TablaCursor); el segundo parmetro es
el nombre del cursor y se le puede dar el nombre que mejor haga referencia a nuestra tabla
SQL.
Ahora veremos como funciona el Framework. Tratare de ser lo mas explicito posible, para que
ustedes lo puedan aplicar en su sistema de la manera sencilla y fcil. Quiero remarcar que la
idea de todo esto es no modificar el cdigo de nuestros Sistemas.
Las tablas que utilizaremos para nuestro ejemplo son las siguientes
- CabeceraDoc
- DetalleDoc
- Productos
Antes de comenzar quiero recordarles que cuando utilizamos nuestros controles (TextBox,
ComboBox, ListBox, Etc). En el la propiedad ControlSource va en lazado la tabla y el campo.
CabeceraDoc
NumeroDoc Fecha

CodCli

CodVen

FPago

Total

En el Load de formulario cargamos nuestro cursor, que vamos a trabajar


Thisform.sqlconector1.Execute(Select * From CabeceraDoc,TmpCabecerado)
Si lo quieren hacer ms interesante podemos manejar los buffer de almacenamiento de la
siguiente manera.

CURSORSETPROP("Buffering",5," TmpCabecerado")
Agregar un nuevo Registro.
Botn Nuevo.
Select TmpCabecerado
APPEND BLANK
Despus que hacer todo nuestro proceso y de escribir los valores correspondientes en
nuestros controles. Pasamos a guardarlo
Botn Grabar.
Select TmpCabecerado
=TABLEUPDATE(.T.)
Thisform.sqlconector1.Validarfecha = .T. &&Valido la fecha si no se escribo nada
Thisform.sqlconector1.sqlcomando(N,TmpCabecerado,CabeceraDoc)
Botn Eliminar.
Primer paso cuando uno quiere eliminar un registro es ubicarse en la posicin del registro que
se desea eliminar.
Select TmpCabecerado
Delete
Thisform.sqlconector1.cLlavePrimaria = NumeroDoc
Thisform.sqlconector1.sqlcomando(E,TmpCabecerado,CabeceraDoc)
Como pueden observar todo el cdigo es de VFP no hay nada nuevo y de seguro mucho de
ustedes lo tienen as.
En este ejemplo veremos como se utiliza la propiedad validacampotablasql, y como guardamos
nuestro detalle.
DetalleDoc
NumeroDoc
CodProd
Cantidad
Precio
Importe

Producto
CodProd

Descripcion

Unidad

Stock

PCosto

StockMin

Nota: los nombres de las tablas pueden ser diferente y los campos pueden ser mucho ms o
diferentes solo lo utilice para el ejemplo. Hay muchas formas de determinar nuestras tablas y
que campos deben llevar cada uno de ellos, a si que todo es valido segn que sistema queramos
desarrollar.
Consultando nuestra tabla y poder mostrarlo en nuestra Grilla y darles una
presentacin a nuestros usuarios.

Thisform.Execute(Select d.*, p.Descripcion, p.Unidad From DetalleDoc d Inner Join Productos p


On d.CodPro = p.CodPro ,TmpDetalle)
Nuestra nueva tabla quedara de la siguiente manera.
TmpDetalle
NumeroDoc CodProd Descripcion Cantidad Precio

Unidad

Precio

Importe

Aqu vemos que no todo los campos pertenecen a la tabla DetalleDoc, particularmente nunca la
descripcin del producto o algunos campos en mi tabla detalle, ya que todo eso lo tengo en la
tabla maestra Producto, por forma de normalizacin no puedo repetir datos en mi base de
datos en mas de dos tablas.
Botn Agregar Detalle
Select TmpCabecerado
APPEND BLANK
Quiero aclara que hay varias cosas que hacer aqu, para obtener el producto con una busqueda
o ya sea la forma de llenado con un insert into o un appen blank la forma como se programa no
me voy a centrar ah. Continuando guardamos el nmero del documento que hemos creado
Replace NumDoc With Thisform.TxtNumeroDoc.Value
As agregamos las lneas que necesitamos para nuestro detalle. Ahora nuestro Botn Guardar
quedara de la siguiente manera.
Botn Grabar.
&&Guardando la cabecera
Select TmpCabecerado
=TABLEUPDATE(.T.)
Thisform.sqlconector1.Validarfecha = .T. &&Valido la fecha si no se escribo nada
Thisform.sqlconector1.sqlcomando(N,TmpCabecerado,CabeceraDoc)
&&Guardando el Detalle
Thisform. sqlconector1.Validacampotablasql = .T. &&Verifico si los campos son iguales
Select TmpDetalle
Scan TmpDetalle.cantidad >0 && me aseguro que tenga cantidad
= Thisform.sqlconector1.sqlcomando(N, TmpDetalle, DetalleDoc)
Endscan
Para la actualizacin de los registro seria todo igual, con la nica diferencia que esta vez
debemos de determinar quien es la llave principal y poder hacer los cambios sobre ello.
Thisform.sqlconector1.cllaveprimaria = NumeroDoc
Thisform.sqlconector1.sqlcomando (A,TmpCabecerado,CabeceraDoc)

El Framework no tiene limitacin cuando se quiere utilizar para inserte y/o actualizar registro
de una tabla. Ejemplo para insertar campos a una tabla.
Select TablaVFP
Go Top
Scan
Thisform.sqlconector1.sqlcomando(N,TablaVFP,TablaSQLAlmacenar)
EndScan
Nota: CondUpdate se utiliza si quiero seguir restringiendo la actualizacin.
Tambin se tiene que tomar en cuenta, si se utiliza el Framework para la actualizacin de los
datos forzosamente tiene que declarar un campo como llave primaria, teniendo en cuenta que
este campo sea o no llave primaria en su tabla.
Ejemplo:
Thisform.sqlconector1.sqlcomando (A,TmpCabecerado,CabeceraDoc, CodCli=RUSS )
La verdad que no van a cambiar nada de sus cdigo todo ser igual, espero estar en contacto
con ustedes y poder ayudarles a los interesados. Me pueden contactar en el siguiente correo
rycjesusrj@hotmail.com

Migrar Datos a de la Base de Datos de Visual Fox Pro a MySQL


Otro punto que quiero aclarar, he visto en las paginas web a terceros que ofrecen programas
para migrar de VFP a SQLServer, pero djeme decirle que eso no es necesario porque el mismo
SQLServer te permite hacer la migracin y se que muchos de ustedes lo saben. Lo no pude
migrar la data de VFP a Mysql es utilizando las propias herramientas de mysql. Para ello he
desarrollado un software que permite migrar con mucha facilidad. Puedes obtener un demo de
la siguiente direccin.
Espero haber sido lo mas explicito posible. Crticas sugerencias sern bien recibidas y aquellos
que quieran dar mayor nfasis al tema, podemos hacer algo diferente.

VEREMOS UN JEMPLO CLASICO DE MANTENIMIENTO


Parte de Presentacin de Datos.

Entrada de Datos.

El Botn Nuevo

El Botn Cancelar

El Botn Grabar

El Botn Editar

El Botn Editar

Atentamente;

Ing. Russvell Jesus Soto Gamarra


Asesor de Computacion y Sistemas
Leon, Guanajuato - Mexico
Tel. Oficina.: 1(477)6376041 / 6376042
Tel. Celular.: 1(477)1660511
Email.: rycjesusrj@hotmail.com