30 de octubre de 2002

.NET for Visual FoxPro Developers

.NET for Visual FoxPro Developers 
by Kevin McNeish (English)



Title: .NET for Visual FoxPro Developers
Author: Kevin McNeish
Edited by: Cathi Gero
ISBN: 1-930919-30-1
Length: 550 pages
Press date: September, 2002
Ebook format: .PDF

Resumen

Si tienes curiosidad acerca de lo que ofrece .Net, este libro proporciona una visión fuerte de .NET Framework y los lenguajes C# y Visual Basic. Le ayudara a evaluar estas nuevas tecnologías a través de la vision de Visual FoxPro. Si ya están "vendidos" y están listos para aprender detalles acerca de cómo utilizar .NET en sus proyectos de desarrollo de software, este libro ofrece un montón de información de "Como", "Paso a paso" y "Mejores prácticas" que le ayudará escalar la curva de aprendizaje de .NET y marchar rápidamente.

El primer capítulo establece el escenario para el resto del libro por responder preguntas como "¿Qué es .Net"? y "¿Por qué debería estar interesado en .NET"?

En los otros capítulos se ven los detalles de los lenguajes C# y Visual Basic .NET para ayudarle a decidir qué es lo mejor para Uds.

Mas información: http://www.hentzenwerke.com/catalog/netvfp.htm

29 de octubre de 2002

Campos calculados en tablas SQL Server 2000

Para ahorrarse un poquitin de trabajo. Cuando almacenamos unicamente el valor de una llave foranea en una tabla, posteriormente debemos hacer una vista o hacer una relacion en un informe para desplegar regularmente campos de descripcion.

Se preguntaran que tiene que ver esto con los campos calculados, por ejemplo al definir una tabla en SQL Server, podemor crear un campo calculado de esta manera, ejemplo:

CREATE TABLE [tbl_empleados] (
	[id_empleado] [char] (10) COLLATE Modern_Spanish_CI_AS NOT NULL ,
	[nombres] [char] (60) COLLATE Modern_Spanish_CI_AS NULL ,
	[cuota_facturacion] [numeric](10, 2) NULL 
	CONSTRAINT [PK_tbl_empleados] PRIMARY KEY  NONCLUSTERED 
	(
		[id_empleado]
	)  ON [PRIMARY] 
) ON [PRIMARY]

Almacenamos en ella una lista de empleados con su codigo, nombre y cuota de facturacion, posteriormente necesitariamos una tabla donde almacenar las horas laboradas y hacer un calculo del valor con relacion al tiempo trabajado multiplicado por su cuota de facturacion, hariamos entonces una tabla parecida a esta:

CREATE TABLE [tbl_registro_de_empleados] (
	[id_empleado] [char] (10) COLLATE Modern_Spanish_CI_AS NOT NULL ,
	[nombres] [char] (60) COLLATE Modern_Spanish_CI_AS NULL ,
	[cuota_facturacion] [numeric](10, 2) ,
	[horas_trabajadas] [numeric](10, 2) ,
	[valor_a_pagar] as  cuota_facturacion*horas_trabajadas ,

Esta tabla esta bien, podriamos almacenar el codigo del empleado, sus horas trabajadas, almacenar el valor por hora y el campo calculado nos daria el resultado de multiplicar las horas por su cuota de facturacion. Sin embargo, cuando hagamos un informe, necesitariamos hacer una relacion con el archivo de empleados, para saber su nombre, y alli es donde entra a funcionar lo que les quiero dar a conocer, en SQL 2K, se implementaron las UDF (funciones definidas por el usuario), podriamos usar un select e incluir una funcion que creemos que nos devuelva el nombre del usuario en base al registro seleccionado y esto tambien funciona, sin embargo, algo que probe y funciono de maravilla, fue el crear un campo calculado en una tabla que haga referencia a una funcion y que almacene automaicamente el valor que nos devuelve la funcion por cada registro introducido, evitando asi, el hacer relaciones de mas y sobre todo, el mantener actualizada la data en la tabla, e aqui el ejemplo de como realizar un campo calculado que llame a una funcion para devolver data de otra tabla.

Primero creamos la funcion:

CREATE FUNCTION fn_nombre_empleado (@id_empleado char(10))
RETURNS char(60) AS  
BEGIN 
declare @nombre char(60)

select @nombre=ltrim(rtrim(nombres)) from tbl_empleados where id_empleado=@id_empleado

return @nombre

END

Luego redefinimos nuestra tabla y le agregamos un campo calculado que se llame nombre del empleado la tabla quedaria de esta manera:

CREATE TABLE [tbl_registro_de_empleados] (
	[id_empleado] [char] (10) COLLATE Modern_Spanish_CI_AS NOT NULL ,
	[nombres] [char] (60) COLLATE Modern_Spanish_CI_AS NULL ,
	[cuota_facturacion] [numeric](10, 2) ,
	[horas_trabajadas] [numeric](10, 2) ,
	[valor_a_pagar] as  cuota_facturacion*horas_trabajadas ,
	[Nombre] as  .dbo.fn_nombre_empleado(tbl_registro_de_empleados.id_empleado))

Con esto obtendriamos que cada vez que se ingrese un codigo de empleado, la tabla nos despegaria el nombre del mismo y podriamos hacer informes mucho mas rapido y sin tener que almacenar la data o hacer relaciones.

Espero que les sirva.

Fernando España

26 de octubre de 2002

Ejemplo basico de ADO

Ante algunas consultas sobre la forma de conectarse y acceder a SQL Server utilizando ADO, acá va un ejemplo básico de su uso...
* EjemploADO.prg
* Algunos ejemplos de uso de ADO desde VFP
* Jose M. Marcenaro - 2001/11/12
* -------------------------------------------
* Para tener intellisense de estos objetos (VFP 7)
* agregué previamente la Type Library de ActiveX Data Objects
* al Intellisense Manager (Solapa Types / Type Libraries)
LOCAL loConn AS ADODB.CONNECTION
LOCAL loCmd AS ADODB.COMMAND
LOCAL loRs AS ADODB.Recordset
LOCAL lcConnString AS STRING

* conexion por seguridad integrada de Windows
lcConnString = "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI"

* conexion por usuario / password de SQL Server
* lcConnString = "Provider=SQLOLEDB;Data Source=MSSQL;Initial Catalog=Northwind;User Id=sa;Password=pass;"

* abro la conexion
loConn = CREATEOBJECT("ADODB.Connection")
loConn.CursorLocation= 3 && adUseClient
loConn.OPEN(lcConnString)

* realizo un select simple
loRs = loConn.Execute("SELECT * From Products")
MostrarRecordset( loRs)
loRs.CLOSE

* creo un stored procedure para poder invocarlo despues
ON ERROR xx=0  && ignorar si ya existe el SP
loConn.Execute( "";
  +"create procedure Probar (@Inicial varchar(10)) as ";
  +"    select * from Products where ProductName like @Inicial+'%'")
ON ERROR

* invoco al SP recien creado
loRs = loConn.Execute("exec Probar 'M'")
MostrarRecordset( loRs)
loRs.CLOSE

* lo invoco mediante un objeto Command (acceso a coleccion parámetros)
loCmd = CREATEOBJECT("ADODB.Command")
loCmd.ActiveConnection = loConn
loCmd.CommandText = "Probar"
loCmd.CommandType = 4 && adCmdStoredProc
loCmd.PARAMETERS.REFRESH && obtiene parametros del SP
loCmd.PARAMETERS.ITEM(";@Inicial") = 'L'
loRs = loCmd.Execute()
MostrarRecordset( loRs)
loRs.CLOSE

RETURN

********************************************************
PROCEDURE MostrarRecordset( loRs AS ADODB.Recordset)

  LOCAL ln, li, lcStr
  lcStr = ""

  FOR ln = 1 TO 10  && primeros 10 registros como máximo
    IF loRs.EOF then
      EXIT FOR
    ENDIF
    FOR li=1 TO MIN(loRs.FIELDS.COUNT, 3) && primeros 3 campos como máximo
      lcStr = lcStr+TRANSFORM(loRs.FIELDS.ITEM(li).VALUE)+","
    NEXT
    lcStr = lcStr+CHR(13)
    loRs.MoveNext
  NEXT
  MESSAGEBOX(lcStr)

ENDPROC
Jose Marcenaro
Microsoft MVP
da Vinci - Argentina

22 de octubre de 2002

Verificar la ortografía en VFP con Word

Con el siguiente código podemos verificar la ortografía de cualquier texto en VFP usando el corrector ortográfico de MS Word.

Este código de Trevor Hancock está en el Artículo Q271819 de la Base de Conocimientos de Microsoft.

Para probarlo, solo hay que pegar el código en un nuevo .PRG y ejecutarlo desde VFP.
************ START CODE ***********
PUBLIC oform1

oform1=CREATEOBJECT("form1")
oform1.SHOW
RETURN

**************************************
*
DEFINE CLASS form1 AS FORM

  HEIGHT = 250
  WIDTH = 375
  SHOWWINDOW = 2
  AUTOCENTER = .T.
  BORDERSTYLE = 2
  CAPTION = "VFP - Word Spell Checking"
  MAXBUTTON = .F.
  NAME = "Form1"

  ADD OBJECT edttexttocheck AS EDITBOX WITH ;
    HEIGHT = 163, ;
    LEFT = 23, ;
    TOP = 21, ;
    WIDTH = 332, ;
    NAME = "edtTextToCheck"

  ADD OBJECT cmdcheckspelling AS COMMANDBUTTON WITH ;
    TOP = 207, ;
    LEFT = 115, ;
    HEIGHT = 27, ;
    WIDTH = 149, ;
    CAPTION = "Check Spelling", ;
    NAME = "cmdCheckSpelling"

  PROCEDURE findword
    *~~~~~~~~~~~~~~~~~~~~~
    * PROCEDURE FindWord
    *
    * AUTHOR: Trevor Hancock, , Microsoft Corporation
    * CREATED : 08/22/00 11:50:32 AM
    *
    * ABSTRACT: Locates an installation of MS Word using the FindExecutable API
    *           Creates a file with a .doc extension, checks the association on that
    *           file using FindExecutable, then deletes the file. FindExecutable returns
    *           the full, null terminated path to the application associated with
    *           .doc files (in this case).
    * ACCEPTS: Nothing
    * RETURNS: Full path to the application associated with .doc files on this machine.
    *~~~~~~~~~~~~~~~~~~~~~

    LOCAL lcPath, lcResult, lcFileName, llRetVal, ;
      lcCurDir, lnFileHand, lcWordPath

    lcPath = SPACE(0)
    lcResult = SPACE(128)
    llRetVal = .F.
    *!* Determine the DIR this form is running from. JUSTPATH() and ADDBS()
    *!* could be used here instead (if using VFP6), but this code will work 
    *!* in any VFP version.
    lcCurDir = SUBSTR(SYS(16,0),ATC([ ],SYS(16,0),2)+1)
    lcCurDir = SUBSTR(lcCurDir,1,RAT([],lcCurDir))

    lcFileName = lcCurDir + SYS(3) + [.doc]

    *!* Create a file with a .doc extension.
    *!* Could use STRTOFILE() here in VFP6.
    lnFileHand = FCREATE(lcFileName,0)
    = FCLOSE(lnFileHand)

    DECLARE INTEGER FindExecutable IN shell32 STRING @lcFilename, ;
      STRING @lcPath , STRING @lcResult

    *!* Determine the file association on .DOC files
    IF FindExecutable(@lcFileName, @lcPath, @lcResult) > 32
      *!* Strip off trailing chr(0)
      lcWordPath = UPPER(SUBSTR(lcResult,1,LEN(ALLTR(lcResult))-1))
      IF [WINWORD] $ lcWordPath
        llRetVal = .T.
      ENDIF
    ENDIF
    *!* Clean up after ourselves
    ERASE (lcFileName)
    RETURN llRetVal
  ENDPROC

  PROCEDURE DESTROY
    IF TYPE([goWord]) = [O]
      IF TYPE([goWordDoc]) = [O]
        goWordDoc.SAVED = .T.
        goWordDoc.CLOSE
      ENDIF
      goWord.QUIT
    ENDIF
    RELEASE goWord, goWordDoc
  ENDPROC

  PROCEDURE INIT
    *--- English
    * THIS.edtTextToCheck.VALUE = "Thhis text has mistakees in it. We will seend " +  ;
    * "it to Word and have it cheked."

    *-- Español
    THIS.edtTextToCheck.VALUE = "Ezte tecto esta escrito kon herrores ppara " +  ;
      "que Word lo chequee."

  ENDPROC

  PROCEDURE cmdcheckspelling.CLICK
    *~~~~~~~~~~~~~~~~~~~~~
    * PROCEDURE cmdcheckspelling.CheckSpelling
    *
    * AUTHOR: Trevor Hancock, Microsoft Corporation
    * CREATED : 08/22/00 12:03:46 PM
    *
    * ABSTRACT: Automates MS Word to check the spelling of text in
    *                 THISFORM.edtTextToCheck
    * ACCEPTS: Nothing
    * RETURNS: Nothing
    *~~~~~~~~~~~~~~~~~~~~~

    IF TYPE([goWord]) # [O] && Check if you have already instantiated Word

      IF !THISFORM.FindWord() && You don't have Word up, so let's locate it.
        MESSAGEBOX([Microsoft Word is either not installed or is incorrectly registered.], + ;
          0,[Word Start-Up Failed])
        RETURN .F.
      ENDIF

      *!* Change the mouse pointer for all form controls to indicate processing (opening Word)
      WITH THISFORM
        .cmdCheckSpelling.MOUSEPOINTER = 11
        .edtTextToCheck.MOUSEPOINTER = 11
        .MOUSEPOINTER = 11
      ENDWITH

      PUBLIC goWord, goWordDoc && Public vars for Word and Document1 in Word.
      goWord = CREATEOBJECT([WORD.APPLICATION]) && Create Word
      WITH goWord
        .WINDOWSTATE= 0  && wdWindowStateNormal (needs to be Normal before you can move it)
        .MOVE(1000,1000) && Move the window out of view
        goWordDoc = .Documents.ADD
      ENDWITH

      *!* Change mouse pointers back
      WITH THISFORM
        .cmdCheckSpelling.MOUSEPOINTER = 0
        .edtTextToCheck.MOUSEPOINTER = 0
        .MOUSEPOINTER = 0
      ENDWITH

    ENDIF

    WITH goWordDoc
      .Content.TEXT = ALLTRIM(THISFORM.edtTextToCheck.VALUE)
      .ACTIVATE
      IF .SpellingErrors.COUNT > 0
        .CHECKSPELLING
      ELSE
        =MESSAGEBOX([Spell check complete. No errors found],0,[Spell Check])
      ENDIF
      *!* For some reason, Word likes to make itself visible here. Keep it hidden...
      goWord.VISIBLE = .F.
      THISFORM.edtTextToCheck.VALUE = .Content.TEXT
    ENDWITH
  ENDPROC

ENDDEFINE
*
**********************************
*!*********** END CODE ***********

18 de octubre de 2002

COM+ con VFP 7.0 - Parte 3

Publicado originalmente en FoxTalk.
Traducción de Jorge Espinosa.

Las transacciones son una parte importante de cualquier mecanismo de actualización de datos. La parte 3 de Craig Berntson nos introduce en la Coordinación de Transacciones Distribuidas y explica como usar las transacciones bajo COM+.

Transacciones

Sin ellas no podemos estar seguros que los datos están siendo escritos en todas las tablas involucradas en la actualización. Antes de introducirnos en como trabajan las transacciones en COM+ hagamos una revisión rápida de transacciones.

Revisión de Transacciones

Joe quiere transferir $100 de su cuenta de pagos a su cuenta de cheques. El camina hacia el cajero, inserta su tarjeta, presiona el botón para empezar la transferencia. Durante la escena, esta transferencia puede se lograda de dos maneras. La primera manera es que el balance de la cuenta de pagos de Joe puede ser reducida por $100 y el balance de su cuenta de cheques incrementada por $100. La segunda opción es que el balance de su cuenta de cheques puede ser incrementada y el balance de su cuenta de pagos puede ser decrementada. Pero que pasa si allí sucede una caída del sistema entre las dos actualizaciones? Bajo la primera escena Joe no estaría feliz. El perdió $100. En el segundo ejemplo Joe está muy feliz. El es $100 mas rico pero el banco tiene ahora una pérdida de $100. Lo que nosotros queremos es esto, en el evento de la caída mencionado, o ambas cuentas deben se actualizadas o ninguna debe ser actualizada. El propósito de la transacción es asegurar que esto pase. Las transacciones deben seguir la regla ACID, que es, atomicidad, consistencia, aislamiento y durabilidad.

La Atomicidad significa que o todas o ninguna de las actualizaciones se ejecuten. La Consistencia significa que si una transacción falla los datos son retornados al mismo estado que tenían antes de empezar la transacción. El aislamiento significa que una transacción no sepa que otra transacción se está haciendo. Finalmente, la Durabilidad significa que el estado de la transacción se guarda, no importa que pase en el sistema.

Esto es manejado generalmente a través de un log de transacciones.

Podemos implementar transacciones en nuestros datos de VFP al usar los comandos BEGIN TRANSACTION / END TRANSACTION / ROLLBACK. El pseudo código muestra un procedimiento de ejemplo:
BEGIN TRANSACTION
LlSavingsOk = UpdateSavings(-100)
LlCheckingOk = UpdateChecking(100)
IF llSavings and llChecking
 END TRANSACTION
Else
 ROLLBACK
ENDIF
Las transacciones en VFP solo trabajan con datos de VFP, y las transacciones de VFP carecen de la regla de la durabilidad de ACID. No hay ningún log de transacciones.

Si estuviésemos usando SQL Server necesitaríamos usar un mecanismo diferente. Podemos usar comandos de ADO para llamar a SQL server cuando empieza o termina una transacción o podemos codificar en un stored procedure.

Sin embargo, que pasaría si la cuenta de pagos estuviese en SQL Server y los datos de la cuenta de cheques estuviesen en Oracle? Las transacciones de Sql Server solamente trabajarían en Sql Server, y las transacciones de Oracle solamente trabajarían con Oracle. Necesitamos una sola transacción que trabaje con ambas base de datos. Aquí es donde entra la Coordinación de Transacción Distribuida (DTC).

Usando el DTC

El DTC nos permite tener transacciones que crucen base de datos. Esto significa que tenemos datos en ambos, Sql Server y Oracle, que actualizaríamos por la misma transacción. Bajo MTS y VFP 6, los datos de Fox no podrían participar en la transacción DTS.(Esto cambia bajo COM+ y VFP7. Veremos acerca de esto mas adelante). Volviendo al DTC.

El DTS usa un commit en dos fases. Básicamente, en la primera fase, el DTS pregunta a la base de datos si puede hacer una actualización. Si todos los datos responden que si a esa pregunta, comienza la segunda fase, en el que el DTS le dice a la base de datos que debe actualizar los datos. Si alguna de las base de datos responde que no el DTS le dice a las bases de datos que se hace un Roll Back de la actualización.

Veamos como las transacciones son manejadas bajo MTS:
DEFINE CLASS Math AS SESSION OLEPUBLIC
FUNCTION Multiply(tnNum1, tnNum2)
LOCAL lnResult, LomTX, LoContext

** Creamos una referencia al objeto MTS
LoMtx = CREATEOBJECT("MTXAS.APPSERVER.1")

** Creamos una referencia al objeto Contexto
LoContext = loMTX.GetObjectContext()

lnResult = tnNum1*tnNum2

** Cierra la transaccion si existe y le avisa a MTS que ha finalizado con el uso del componente

LoContext.SetComplete()

** Si existiera un error podriamos abortar la transacción y avisarle a MTS que finalizamos
** Con el componente usando loContext.SetAbort()

RETURN lnResult
ENDFUNC
ENDDEFINE
Note que cuando nosotros hacemos Commit o abortamos la transacción, MTS también descargará el componente.

Esto significa que si el próximo comando en nuestra aplicación necesita el componente, tendremos que hacer otro CREATEOBJECT() en el cliente. Veamos como cambia esto en COM+:
 
DEFINE CLASS Math AS SESSION OLEPUBLIC
FUNCTION Multiply(tnNum1, tnNum2 as Number);
 AS Number HELPSTRING "Multiplica ;
  Dos números y devuelve el resultado"

LOCAL lnResult, LomTX, LoContext, loContextState, ;
 LlDone, llGetDone, lnTxnState, lnGetTxnState

LlDone = .T.
LlGetDone = .F.
LnTxnState = 1
LnGetTxnState = 0

** Creamos una referencia al objeto MTS
LoMtx = CREATEOBJECT("MTXAS.APPSERVER.1")

** Creamos una referencia al objeto Contexto
LoContext = loMTX.GetObjectContext()

** Crea una interfaz al estado del Contexto
LoContextState = GETINTERFACE(loContext, "iContextState")

lnResult = tnNum1*tnNum2

** Establece el seteo de la Transacción (Consistencia)
** 0 = Commit,   1 = Abort

LoContextState.SetMyTransactionVote(lnTxnState)
LoContextState.GetMyTransactionVote(@lnGetTxnState)

** Lleva adelante el seteo de Activacion
** .T. = Desactiva ,   .F. = Deja Activado

loContextState.SetDesctivateOnReturn(llDone)
loContextState.GetDeactivateOnReturn(@llGetDone)

RETURN lnResult
ENDFUNC
ENDDEFINE
En este ejemplo, podemos hacer Commit o abortar la transacción con SetMyTransactionVote, pero tenga en cuenta la instancia del componente permanecerá activa hasta que explícitamente llamemos a SetDeactivateOnReturn con .T. como parámetro.

Ahora estará preguntándose donde encaja el DTC en esto COM+ automáticamente llama al DTC por usted

El DTC habla con la base de datos a través del uso de Resource Manager.

MTS y COM+ ya vienen con Resource Managers para Oracle y SQL Server, pero no para VFP. Es por esto que los datos de VFP no podrían tomar parte en una transacción MTS.

Resulta que Resource Managers es muy difícil para implementar. Entonces, por esto es que COM+ es llamado Compensating Resource Managers(CRMs). CRMs son mas fáciles de implementar que un Resource Managers. Al usar un CRM podemos tener nuestros datos involucrados en una transacción DTC.

Un CRM consiste en dos partes, la CRM Worker y la CRM Compensator. Esto corresponde a las dos fases del commit del DTC. Un detalle en discusión sobre el CRM está fuera del alcance de este capítulo. Sin embargo, VPF 7 viene con un ejemplo de aplicación CRM. Encontrará esto en las carpetas SAMPLES\COM+\CRM bajo la instalación de su VFP 7.

Configurando transacciones COM+

Como muchos de los rasgos en COM+, las transacciones son manejadas en tiempo de ejecución. Abrir el Component Service Manager (applet) y elegir uno de sus componentes. Click derecho en el componente y seleccione propiedades, seleccione el tab de transacciones. Verá cinco opciones de transacciones.(figura1 y tabla1)

También notará el ckeck box "Override global transaction timeout value". Cuando seleccione Required o Required new transaction, este ckeckbox estará habilitado. Entonces puede ingresar el número de segundos que correrá la transacción antes del time out.

Esto fue un acercamiento a las transacciones. En la parte 4 daremos un vistazo a las ventajas de COM+ con Queued Components.



Figura 1.

Tabla 1. Tipos de transacciones soportados por componentes COM+.
SeetingDescripción
DisabledLa transacción no se necesita. Elija esta cuando no necesite la sobrecarga de trabajo que implica generar una transacción, por ejemplo un componente que no tiene que actualizar ningún dato.
Not SupportedImpide a un componente usar la transacción, sin tener en cuenta el estado transaccional de la llamada al componente.
SupportedEl componente participa en la transacción si una está activa.
RequiredEl componente participa en la transacción si una está activa. Si no hay ninguna transacción activa, genera una nueva.
Requires NewUna transacción nueva es generada siempre.

Craig Berntson es Microsoft Certified Solution Developer y fue nombrado cuatro veces Microsoft Most Valuable Profesional. Disertante de varias conferencias de FoxPro en todo EEUU y eventos de Microsoft en Salt Lake. Es Presidente del Salt Lake City Fox Users Group y actualmente ingeniero de software senior para 3m Health Information Systems.
Jorge A. Espinosa, Buenos Aires (Capital Federal), Argentina, es Analista Programador y MCP. Dedicado al desarrollo de sistemas desktop desde el año 1987; siempre en el entorno xBase y en Visual Fox Pro desde la version 3.0. Hoy Gerente de Sistemas en Droguería Saporiti SACIFIA.

15 de octubre de 2002

Conferenciantes PortalFox España 2003

Aqui teneis la primera lista provisional de conferenciantes ... puede sufrir algun cambio. Ordenados alfabéticamente por apellido:

Miguel Egea (portalsql.com)

Nacío en Calasparra (Murcia) en 1969, Estudió Informática en la Universidad de Castilla la mancha y comenzó su vida laboral como Freelance desarrollando aplicaciones comerciales para sectores tan dispares como la peluquería o la banca. Fundó el departamento de informática de Laboratorios Munuera en Murcia y desarrolló sus primeras aplicaciones con Bases de Datos Access hace ya más de 10 años. Desde hace ya bastantes años está trabajando con SQL-SERVER desde su versión 6.5 hasta la actual 2.000. En este periodo ha dirigido y colaborado en numerosos desarrollos en la consultora Sinergia Tecnológica (http://www.sinergiatec.com) que está integrada en el grupo IT-Deusto (http://www.itdeusto.com). En Sinergia Tecnológica dirige varios proyectos de desarrollo de software en plataformas Microsoft con bases de datos diversas como Sql-Server, Oracle, ... Desde mayo de 2002 es MVP en SQL-SERVER por su colaboración en la comunidad On-Line de Microsoft. También pertenece a PASS Spanish Group, la asociación de profesionales de SQL-Server. Es el webmaster de www.portalsql.com.


Miguel Angel Hernaiz (gnomo.net)

Nacido en 1964 en Madrid, lleva desde el año 1981 metido entre pantallas y teclados (luego vendrían los ratones). Autodidacta de nacimiento, empezó en el mundo de los mini y grandes mainframes: S36, S38, Kienzle, AS400... Hasta que llegó a sus manos un PC de IBM. Descubrió Dbase, Clipper, las comunicaciones por modem... Alaska Xbase, Multimedia, Internet, Vfoxpro, Html, Sql server, Oracle... Gracias a Internet empezó a colaborar con el resto de desarrolladores de VFP, en chats, foros, News, y forma parte del VFUG y UniversalThread desde sus inicios, allá por el 96. Junto con Fernando y Juan Carlos, tuvo la gran oportunidad de elevar su nivel en OOP y plataformas cliente-servidor. Colabora con multiples empresas de Analista, Programador y Tecnico de Sistemas y Aplicaciones. Ha publicado en revistas y foros, y se empeña en que el nivel de los que le rodean sea más y mas alto cada día. Ahora anda por Barcelona entre servidores WEB y MAIL, .NET, SQL Server y Desarrollo de sitios Web, con VFP como capa de datos y reglas de negocio, por supuesto..


Pedro Hernandez Muñoz (www.pedrohernandez.com)

Nacido hace 36 años en Almelo ( Holanda ) , inició su andadura en el campo informático allá por el año 80 estudiando Cobol cuando tenia 14 años en Valencia. A partir del año 87 inició la programación xBase con dBase y Clipper, lo que le permitió colaborar durante un tiempo con una empresa que aún hoy es líder en el tema de la enseñanza y edición de libros, en la que también escribió artículos en sus publicaciones. Tras esta experiencia se traslada a Madrid y comienzo a desarrollar proyectos de aplicaciones siempre con FoxPro y Visual FoxPro para diversas empresas, editando en el año 1998 el libro “Visual FoxPro 5. Desarrollo de Aplicaciones” en la editorial McGrawHill distribuido en España y Latinoamérica.


Luis Maria Guayan (Vicente Trapani, S.A.)

37 años, nació en Tartagal, Salta (Argentina) y desde hace mas de 15 años que reside en Tucumán (Argentina). Comenzó a programar en lenguajes xBase en el año 1990 (dBase, FoxPlus y Clipper). Con estas herramientas realizó sus primeros trabajos profesionales como desarrollador independiente. En el año 1994 ingresó a trabajar a tiempo completo en el Área Sistemas de Vicente Trapani S.A., una empresa de Tucumán (Argentina) dedicada a la producción y exportación del limón y todos sus derivados. Allí comenzó a desarrollar con FoxPro 2.6 para Windows y todas las versiones posteriores hasta Visual FoxPro 7. Actualmente es el Responsable del Área Sistemas. Casi la totalidad del software desarrollado por el Área Sistemas de Vicente Trapani S.A. está realizado en FoxPro y Visual FoxPro. Desde el año 1997 participa en los Grupos de Noticias de Visual FoxPro en español. Es allí que a principios del año 2000 se contactó con Pablo Roca para colaborar con PortalFox y sumando esfuerzos poder contar con un sitio para todos los desarrolladores en Visual FoxPro de habla hispana. En Febrero del año 2002 fue nombrado Microsoft MVP (Most Valuable Professional) en Visual FoxPro, por sus colaboraciones en las distintas comunidades "on-line".


Fernando Guerrero (www.callsql.com)

Fernando nació en Santo-Tomé (Jaen) en el 1959, y desde el 1976 está directamente involucrado en el desarrollo de aplicaciones informáticas de un modo u otro. Actualmente ocupa el puesto de Principal Technologist y SQL Server Product Consultant en QA, la empresa de formación en Tecnología de Información líder en el Reino Unido, donde se encarga de desarrollar e impartir nuevos cursos, así como aplicar sus conocimientos en proyectos de consultoría y mentoring, en particular en tecnologías .NET y SQL Server. Fernando es un ponente habitual en conferencias del sector, como TechEd, PASS, VBUG, VBITS, MCTCon, SQLLive, VSConnections, SQL Server Magazine Live, y DevWeek. Escribe para SQL Server Magazine y SQL Server Professional, y es el coautor del libro "Microsoft SQL Server 2000 Programming by Example" (QUE Corporation 2001, ISBN 0-7897-2449-9, ISBN 9879460634 para la version en castellano), y está escribiendo en estos momentos otros libros sobre VB.NET y SQL Server 2000. Fernando es Ingeniero Técnico de Obras Públicas (Hidrología) y Diplomado Universitario en ICCP, MCDBA, MCSE+I, MCSD, MCT y SQL Server MVP (Most Valuable Professional) desde el año 2000.


Jose Enrique LLopis (FUTURA Systems & software)

Nacido en Alicante, 45 años y comencé a trabajar con los sistemas IBM-360. De ahí pasé sucesivamente por los sistemas 370, 32, DEC Rainbow , SECOINSA S30/5 y S20, etc .... Me entretuve con los PDP's y VAX/MicroVAX de Digital y a continuación me sumergí en los ordenadores personales. De ahí pasé a los UNIX, primero sobre los IBM RT6150/51 y después sobre plataforma PC. En 1984 entré en la Caja de Ahorros Provincial de Alicante y de ahí pasé a la Caja del Mediterráneo siempre con sistemas personales y departamentales siendo el responsable por ejemplo del diseño de la red de servidores central para toda la empresa. Comencé a trabajar en fox desde FoxBase, pasando por Foxpro hasta ahora que utilizo VFP7. Hoy día además de mi trabajo en la CAM soy socio de una empresa consultora especializada en productos para el mercado inmobiliario llamada FUTURA Systems & software.


Les Pinter (Pinter Consulting)

Nació en Houston, Texas, pero pasó gran parte de su adolescencia en México. Regresó a Texas para continuar sus estudios superiores. Mientras estudiaba para un doctorado en economía en la Universidad Rice, formó una empresa para desarrollar y comercializar un procesador de texto llamado La Varilla Mágica. En 1980, vendió la Varilla Mágica a un joven de 23 años de Seattle llamado Bill Gates, para formar la base de Microsoft Word. Continuó a trabajar en el área de las microcomputadoras, siguiendo la carrera de desarrollador de base de datos a partir de 1982.
En 1985 Les empezó a trabajar con un nuevo producto llamado FoxBASE, y después de varios años inició la publicación de una revista mensual, The Pinter FoxBASE Letter, en Menlo Park, California. Poco después, Fox Software anunció su nueva generación, FoxPro. Después de otros dos años, salió Visual FoxPro, un lenguaje plenamente orientado a objetos, y Microsoft compró la compañía Fox Software.
Desde entonces, Les publicó su revista mensual por más de 10 años en California, y por 4 años en Moscú. Tiene equipos de programadores en México y en Rusia que colaboran en proyectos de base de datos para varios clientes en los Estados Unidos. Ha participado como ponente en conferencias de Microsoft, Advisor Media, DevConnections y otras, y ha presentado seminarios y cursos en varias universidades en Rusia, México y Cuba. Es autor de seis libros y más de 270 artículos sobre varios temas de la informática. Su próximo libro, Desarrollo de Aplicaciones de Base de Datos con Visual Basic.NET y Visual FoxPro 7, estará disponible a fines de 2002. Les es también piloto privado, y tocaba guitarra en varios conjuntos musicales durante los años 60.


Fernando Puyuelo (Informática Borsan)

Nacido en Villafranca del Bierzo, León. Tiene 34 años. Licenciado en Ciencias Físicas, Especialidad Cálculo Automático en la Universidad Complutense de Madrid. Comenzó a trabajar en el año 1992 en Informática Borsan,S.L., empresa dedicada al desarrollo de software, y de la que actualmente es Director Técnico y socio. Comenzó el desarrollo de aplicaciones en Clipper, pero muy pronto comenzó el desarrollo de las mismas en el incipiente lenguaje que parecía iba a ser el sustituto a Xbase y Clipper, Foxpro. Después de evaluar la versión FOX 20, comenzó a trabajar con la versión Foxpro 2.5 DOS en la realización de un programa de generación de estadísticas. Ha pasado por todas las versiones de desarrollo de Foxpro, hasta llegar a la actual VFP 70. Actualmente la empresa maneja aplicaciones desarrolladas en todas las versiones de windows, incluyendo Fox 26, dada en muchas ocasiones las lentas ganas de migrar de los usuarios, pero poco a poco traspasando todo a VFP70. Actualmente desarrollando un nuevo programa de gestión de Sociedades de Tasación, terreno en el cual la empresa es lider en el mercado español, en un modelo de tres capas, usando como no, VFP. Fernando ha participado en todos los congresos y eventos relativos a foxpro desde 1994. Impulsor de los primeros chat en castellano, así como de la primera fase de la creación de las news de Microsoft en torno a Visual Foxpro. Miembro activo de la comunidad desde sus comienzos..


Pablo Roca (Clavo Congelados, S.A.)

Tiene 42 años, nacido en Palma de Mallorca (España). Pero toda la vida ha vivido en La Coruña. Dedicado al diseño y desarrollo de aplicaciones desde hace 22 años. Los inicios fueron en FORTRAN y tarjetas perforadas allá por el año 1980 en un viejo mainframe de la Universidad de Vigo. Ha trabajado desde técnico de sistemas en Fujitsu España, hasta el puesto que ocupa actualmente como Director de Informática en Clavo Congelados. Impartió diversas conferencias tanto en grupos de usuarios, como en reuniones de informática y colaboró en la presentación del Visual Foxpro 5 junto con Microsoft. Durante unos años fué colaborador de MacWorld España, donde escribia artículos y comparativas de bases de datos. Sus inicios en Foxpro fueron desde los tiempos de Fox Software, con el Foxbase, hasta hoy en día que está con el VFP. Creador de PortalFox, que es la comunidad en línea más grande de habla hispana sobre Visual Foxpro. Es nombrado en Octubre de 2001 como Microsoft MVP (Most Valuable Professional) de VisualFoxpro por su aportación a la comunidad.


Alberto Rodriguez (FoxPress)

Nacido en Palencia (España). 42 años. Licenciado en CC.Económicas y PDG del IESE. Empezó a trabajar en Informática con FoxBase+. Ha desarrollado aplicaciones de Gestión para Empresas, Hospitales y Seguros publicadas en las principales revistas del sector (www.flasof.com). Mentor de FoxPress (www.fpress.com) revista con 10 años de antiguedad y dedicada a Visual FoxPro. Organizador de 5 Congresos sobre Fox. Ha dado cursos y publicado artículos con cuyo código trabajan los desarrolladores de FoxPro de todo el mundo. Es Gerente de la empresa Flash Software.


Ramon Seoane (Molduras del Nororeste)

Licenciado en Informática por la Universidad de La Coruña. Amplia experiencia como programador desarrollando aplicaciones de tipo industrial con autómatas, de comunicaciones con toda clase de dispositivos, de gestión comercial, de producción, etc. En el año 1999 obtengo el título de MCP en Visual Basic y en el 2000 el de Visual Fox. Como responsable del departamento de Sistemas de la empresa Molduras del Noroeste, he llevado a cabo la ardua labor de llenar los escritorios de cabecitas de zorro, haciéndose más popular que el cocodrilo de Lacoste. He utilizado Visual Fox como cliente de SQL Server realizando una aplicación ERP enteramente con dichas herramientas, incluso cuando no había un sólo libro sobre el tema y había que echarle algo de imaginación. Fiel defensor del Fox desde sus orígenes, he impartido cursos desde aquel Dbase hasta el Visual Foxpro 6.0 y participado en el IV Congreso de desarrolladores de Fox comentando las posibilidades de la FOXISAPI aprovechando la información que amablemente Rick Strahl me permitión incorporar.


Jorge Serrano Pérez (portalvb.com)

Nació en Madrid en 1973. Ingeniero Técnico en Informática de Gestión por el ICAI y Microsoft MVP. Su experiencia profesional se extiende por el mundo de la gestión, de la informática y de las telecomunicaciones, especializado en el desarrollo web y de aplicaciones de gestión y de negocio fundamentalmente, posee conocimientos extensos sobre Visual Basic dónde comenzó con la versión 1.0 de este producto, ASP, C#, ADO .NET y SQL Server principalmente, si bien sus conocimientos se extienden en un amplio abanico de aplicaciones de diferentes características y fabricantes. Entre otras cosas, es el propietario, webmaster y administrador de PortalVB.com (http://www.portalvb.com), el primer portal del mundo de habla hispana dedicado a la tecnología .NET con gran cantidad de información para el informático, desarrollador, administrador de sistemas y estudiante, es autor y colaborador de diferentes libros para la editorial Anaya Multimedia (http://www.anayamultimedia.es), de artículos técnicos en la revista técnica Windows TI Magazine (http://www.windowstimag.com), y colaborador de MSDN Latinoamérica (http://www.microsoft.com/latam/msdn) y de MSDN España (http://www.microsoft.com/spain/msdn).

10 de octubre de 2002

Conferencia VFP España 2003

Aquí tenéis mas información ...

Se celebrará del 19 al 21 de Febrero de 2003 en La Coruña (España). Aunque el 19 serán sesiones introductorias (VFP, SQL Server y NET), lo que posiblemente hará que la mayoría de la gente venga solo el 20 y 21.

El costo está todavía sin cerrar del todo pero andará en torno a 100 Euros e incluirá una o dos comidas. Actualmente ya tenemos 10 conferenciantes, bastantes MVPs de SQL Server, VFP y NET.

Lo que si anticipo, que os tendréis que apurar cuando se abra el registro, ya que se calculan problemas de plazas (a pesar de que el salón admita unas 400 personas).

Posibles conferencias:

  • Webservices (I) introducción
  • WebServices (II) intermedio
  • Novedades del VFP8
  • Visual FoxPro y productos de terceros (Mabry, Xceed, Leadtools, PDF ...)
  • Introduccion a NET Framework
  • ADO.NET o ASP.NET (con VFP)
  • VFP e internet (WebConnection, voodoo)
  • Control de proyectos
  • Introduccion a VFP
  • Automatización de Office con VisualFoxpro
  • Consultas en Visual FoxPro
  • VFP y programacion orientada a objetos
  • VFP con SQL Server
  • VFP y NET
  • Introduccion a SQL Server
  • Administracion de SQL Server
  • Optimizacion de SQL Server
  • COM en VisualFoxpro -
  • Acceso a Datos (vistas, SQL Passtrough, CursorAdapter) -
  • Bases de datos en VFP (buffering, reglas de validacion, procedimientos almacenados, database events)
  • 101 trucos en VFP
  • Control de Errores en VFP (TRY .. CATCH)
  • Event Binding
  • Diseño multicapa (objetos de negocio, ...)
  • Visual FoxPro Toolkit para .NET
  • Intellisense con VFP
  • .....


Revisión 15/10/2002

Las conferencias se haran en dos bloques, dia 19 solo alumnos y como dia extra para profesionales, seria de pago para los profesionales fundamentelmente por el tema de darles de comer.

Y dias 20 y 12, para ambos (profesionales y alumnos), para estos dos dias tenemos 12 horas de sesiones, la posibilidad de sesiones simultaneas está un tanto limitada, ya que la segunda sala, no tiene nada que ver (tanto en calidad como en espacio, es de 150 plazas). Por tanto se dará solo una sesión al tiempo. Lo que si haremos es en dicha aula complementaria, una vez que los conferenciantes finalizen se iran alla, para ampliar información, comentar trucos, etc ... la tendremos como un aula de charlas.

Dia 19 Sesiones:


  • Introducción a SQL Server - Fernando Guerrero/Miguel Egea
  • SQL Server (1) - Fernando Guerrero/Miguel Egea
  • SQL Server (2) - Fernando Guerrero/Miguel Egea
  • Introducción a VFP (1) - Pedro Hernandez
  • Introducción a VFP (2) - Pedro Hernandez
  • Introducción a VFP (3) - Pedro Hernandez
  • Introducción a NET(1) - Jorge Serrano
  • Introducción a NET(2) - Jorge Serrano


Debido a que tenemos solo posibilidad de 12 sesiones, mas la keynote, este seria un boceto mas aproximado:

  • Webservices - Pablo Roca
  • VFP y NET - Alberto Rodriguez
  • VFP e internet - Jose Enrique Llopis
  • Office con VFP - Luis Maria Guayan
  • VFP y OOP - Ramon Seoane
  • VFP y SQL Server - Ramon Seoane
  • Acceso a Datos (vistas, SQL Passtrough, CursorAdapter) - Luis Maria Guayan
  • Control de Errores en VFP (TRY .. CATCH) - Les Pinter
  • XML - Les Pinter
  • Optimizacion de SQL Server - Fernando Guerrero/Miguel Egea
  • ASP.NET con VFP - Jorge Serrano
  • Sesiones offline - Fernando Puyuelo/Miguel Angel Hernaiz


En la que mas tengo dudas es en la de XML, quizas seria mejor profundizar mas en otra area que dedicar 1 hora entera a XML.

Necesito opiniones sobre estas conferencias, alguna idea adicional sobre conferencias, etc ...

Pablo Roca