Está en la página 1de 16

Russvell Jesús Soto Gamarra Asesor de Computación y Sistemas San Juan del Rio. Oficina.Ing.México Tel. Querétaro .: rycjesusrj@hotmail.com . Celular.: 1(427)109996 Email.: 1(427)2746184 Tel.

La gran interrogante a todo esto es. PostgreSQL y Oracle). Totalmente fácil y sencillo. si uno quiere orientarse a realizar aplicación remotas o de entorno web es allí donde surgen los inconvenientes de limitación. MySQL. MySQL. déjame decirte que no lo harás.Framework para Visual FoxPro. Si migro mi base de datos de VFP a otro motor de base de datos como (SQLServer. PostgreSQL y Oracle como su Motor de Base de Datos. La nueva versión no ha cambio a simple vista. Utiliza SQLServer. no se si este equivocado pero eso es mi punto de vista. entre una de ellas y la que más interesa a todos . 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. tendré que cambiar la forma de programar. El Framework trae muchas mejoras. lo más importante es que no vas a tener que modificar ni una línea de tu código. Porque he desarrollado un Framework que permite trabajar con cualquier base de datos. Por medio de la presente quiero hacerles llegar mis más cordiales saludos y a la ves darles a conocer de mi nueva versión Framework para Visual Fox Pro. Somos muchos los programadores que hemos venido desarrollando aplicación con la base nativa de Visual FoxPro.

..T.. Inicialmente la propiedad esta en .T.F. .T.UTILIZARTRANSA Valor ha utilizar . . cuando se utiliza el método SQLCOMANDO. de esta manera impediremos que el usuario pierda la información y/o el proceso que esta realizando.F.. El Framework intentara conectarse en hasta en 3 intentos.CLAVE PRIMARIA Aquí ponemos la llave primaria de nuestra tabla que queremos trabajar o el campo que hará referencia para la actualización de los datos. el motivo puede ser como la falla de la red interna o si se está trabajando remotamente la caída del internet. o . Si el valor es . o . Bueno se ha creado 8 propiedades fundamentales y un método que hay que tener en cuenta PROPIEDADES: .F. Ejemplo si tengo un cursor con más campos de la tabla principal solo toma los campos que corresponde a la tabla que se quiere actualizar. Compara la tabla del SQL con el cursor que se ha utilizado.VALIDACAMPOTABLASQL Valor ha utilizar .los desarrolladores es el control de la desconexión a la base de datos. se abre la transacción en Visual FoxPro y en el motor de la base de datos.

F.LVALNSTATUS Valor a utilizar . a un campo de tipo fecha. o . solo envía los campos que se usan en el cursor.T.. si esta en . esto es muy importante para MySQL y PostgreSQL. Esto sucede cuando se hace un insert o update. Esta propiedad ayudar a que el FW sea más rápido o lento si la propiedad esta en .VALIDARFECHA Valor a utilizar . Esta propiedad esta propiedad nos ayudara a mejorar el armado de la cadena SQL ya que si nosotros queremos podemos mandar todas las columnas de la tabla que tenemos denominado cursor a la tabla SQL que deseamos actualizar si esta en . .F. o .F.null. el FW solo armara la cadena SQL una sola vez así existan 100 o más registro en la tabla al momento que se desea guardar.VALIDAIMG Valor ha utilizar . . .T.T.F. Cuando queremos guardar fechas vacía en MySQL no permite enviar error como si estuviéramos mandando valores . Si la tabla tiene imágenes..T. el FW armara la cadena SQL registro por registro..LGENERARCADENASQL Valor a utilizar . o . pero para SQL Server no hay problema. o .T.. . pero si esta en .F.F.T.

OCN SET PROCEDURE TO funciones... si la propiedad OTHERCN está vacía.OPTION=0.OTHERCN Esta propiedad nos ayudara a trabajar con diferentes conexiones simultáneamente en un formulario o ambiente de trabajo.sqlconector1.51 Driver}..16."Error. Ejemplo: Para poder usar tenemos que crear conexiones a diferente base de datos como veremos en el siguiente código MySQL FUNCTION RECONECCION &&conexion predeterminada para el framework CN=SQLSTRINGCONNECT("DRIVER={MySQL ODBC 3.PWD=123456.PORT=3306.execute("SELECT * FROM horarios".PORT=3306.SERVER=localhost. el framework trabajara con la conexión por defecto que es la varia CN."Error.sqlconector1.16.") RETURN CN ENDFUNC FUNCTION OTHERCN &&otra conexion que deseamos realizar OCN=SQLSTRINGCONNECT("DRIVER={MySQL ODBC 3.."TmpTabla") &&OTRA CONEXION Thisform.prg CN = RECONECCION()&&Conexión predeterminada IF CN<1 MESSAGEBOX("Fallo de conexion con el servidor".UID=root.DATABASE=malkaso ftadpi.DATABASE=digital .OPTION=0. .othercn = "" Nota: Al usar otra conexión es preferible dejarla vacía la propiedad othercn para que el framewrok trabaja con la conexión por defecto.PWD=123456.othercn = "OCN" Thisform.51 Driver}.") ENDIF Forma de usarlo &&POR DEFECTO Thisform.sqlconector1. PUBLIC CN."TmpOCNHorario") Thisform..execute("SELECT * FROM TbTabla". sin la necesidad de volver a nómbralo.sqlconector1.SERVER=localhost.") ENDIF OCN=OTHERCN()&&otra conexion IF OCN<1 MESSAGEBOX("Fallo de conexion con el servidor en la segunda base de datos".") RETURN OCN ENDFUNC Es importante declarar las variables públicas en nuestro sistema principal.UID=root.

el segundo parámetro es el nombre del cursor y se le puede dar el nombre que mejor haga referencia a nuestra tabla SQL. cTablaSql.DetalleDoc . ListBox. para que ustedes lo puedan aplicar en su sistema de la manera sencilla y fácil. “E” Eliminar. Etc).Execute(”Select * from Tabla ”.SQLCOMANDO Sus parámetros (cAccion. ComboBox.MÉTODO: . CondUpdate) cAccion = “N” nuevo.”TablaCursor”).CabeceraDoc . Thisform. “A” Actualiza.Productos Antes de comenzar quiero recordarles que cuando utilizamos nuestros controles (TextBox. Ahora veremos como funciona el Framework. En el la propiedad ControlSource va en lazado la tabla y el campo. CabeceraDoc NumeroDoc Fecha CodCli CodVen FPago Total . Tratare de ser lo mas explicito posible. cTablaSqlCur.sqlconector1. Quiero remarcar que la idea de todo esto es no modificar el código de nuestros Sistemas. Las tablas que utilizaremos para nuestro ejemplo son las siguientes .

Select TmpCabecerado =TABLEUPDATE(. que vamos a trabajar Thisform.sqlcomando(“N”.cLlavePrimaria = “NumeroDoc” &&Valido * From la fecha si no se . Primer paso cuando uno quiere eliminar un registro es ubicarse en la posición del registro que se desea eliminar.Execute(“Select CabeceraDoc”.sqlconector1.”Cabecer aDoc”) Botón Eliminar. Botón Nuevo. CURSORSETPROP("Buffering"." TmpCabecerado") Agregar un nuevo Registro.T.) Thisform. escribo nada Thisform. Select TmpCabecerado APPEND BLANK Después que hacer todo nuestro proceso y de escribir los valores correspondientes en nuestros controles.En el Load de formulario cargamos nuestro cursor.”TmpCabecerado”) Si lo quieren hacer más interesante podemos manejar los buffer de almacenamiento de la siguiente manera.T.5.sqlconector1.Validarfecha = .sqlconector1. Pasamos a guardarlo Botón Grabar.”TmpCabecerado”.sqlconector1. Select TmpCabecerado Delete Thisform.

”TmpDetalle”) d. 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 más o diferentes solo lo utilice para el ejemplo.”Cabecer aDoc”) Como pueden observar todo el código es de VFP no hay nada nuevo y de seguro mucho de ustedes lo tienen así.sqlconector1. y como guardamos nuestro detalle. Thisform.Descripcion.sqlcomando(“E”.Unidad From DetalleDoc d Inner Join Productos p On d.CodPro . a si que todo es valido según que sistema queramos desarrollar. En este ejemplo veremos como se utiliza la propiedad validacampotablasql.”TmpCabecerado”.Thisform. Hay muchas formas de determinar nuestras tablas y que campos deben llevar cada uno de ellos. p. Consultando nuestra tabla y poder mostrarlo en nuestra Grilla y darles una presentación a nuestros usuarios. p.*.CodPro = p.Execute(“Select ”.

Continuando guardamos el número del documento que hemos creado Replace NumDoc With Thisform. ya que todo eso lo tengo en la tabla maestra Producto. por forma de normalización no puedo repetir datos en mi base de datos en mas de dos tablas. TmpDetalle Numero Doc CodPr od Descripci Cantid on ad Preci Unid o ad Preci Impor o te Aquí vemos que no todo los campos pertenecen a la tabla DetalleDoc.Value Así agregamos las líneas que necesitamos para nuestro detalle. particularmente nunca la descripción del producto o algunos campos en mi tabla detalle. Ahora nuestro Botón Guardar quedaría de la siguiente manera. 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í.TxtNumeroDoc. Botón Agregar Detalle Select TmpCabecerado APPEND BLANK Quiero aclara que hay varias cosas que hacer aquí.Nuestra nueva tabla quedaría de la siguiente manera. .

sqlconector1.sqlcomando (“A”.sqlconector1. campos son iguales Select TmpDetalle Scan TmpDetalle. Thisform.sqlconector1. Ejemplo para insertar campos a una tabla. .”TmpCabecerado”.Validacampotablasql = .cantidad >0 = Endscan DetalleDoc”) && si los me aseguro que tenga cantidad TmpDetalle”.T.sqlcomando(“N”.sqlconector1.) Thisform. &&Guardando la cabecera Select TmpCabecerado =TABLEUPDATE(.”TmpCabecerado”.” Thisform.”Cabecer aDoc”) &&Guardando &&Valido la fecha si no se el Detalle &&Verifico Thisform.T.”CabeceraDoc”) El Framework no tiene limitación cuando se quiere utilizar para inserte y/o actualizar registro de una tabla.cllaveprimaria = “NumeroDoc” Thisform. sqlconector1.T.Validarfecha = .sqlcomando(“N”.” Para la actualización de los registro seria todo igual.Botón Grabar. con la única diferencia que esta vez debemos de determinar quien es la llave principal y poder hacer los cambios sobre ello. escribo nada Thisform.sqlconector1.

si se utiliza el Framework para la actualización de los datos forzosamente tiene que declarar un campo como llave primaria.Select TablaVFP Go Top Scan Thisform.sqlconector1.”TablaVFP”. . teniendo en cuenta que este campo sea o no llave primaria en su tabla.com Migrar Datos a de la Base de Datos de Visual Fox Pro a MySQL Otro punto que quiero aclarar.sqlconector1.sqlcomando(“N”. Ejemplo: Thisform. he visto en las paginas web a terceros que ofrecen programas para migrar de VFP a SQLServer.”TmpCabecerado”.”CabeceraDoc”.sqlcomando (“A”.” CodCli=’RUSS’ ”) La verdad que no van a cambiar nada de sus código todo será igual. espero estar en contacto con ustedes y poder ayudarles a los interesados.”TablaSQL Almacenar”) EndScan Nota: CondUpdate se utiliza si quiero seguir restringiendo la actualización. Me pueden contactar en el siguiente correo rycjesusrj@hotmail. También se tiene que tomar en cuenta.

podemos hacer algo diferente.pero déjeme decirle que eso no es necesario porque el mismo SQLServer te permite hacer la migración 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 dirección. Espero haber sido lo mas explicito posible. Críticas sugerencias serán bien recibidas y aquellos que quieran dar mayor énfasis al tema.

VEREMOS UN JEMPLO CLASICO DE MANTENIMIENTO Parte de Presentación de Datos. Entrada de Datos. .

El Botón Nuevo El Botón Cancelar El Botón Grabar .

El Botón Editar El Botón Eliminar .