sábado, marzo 26, 2011

VFP: De vuelta a casa

Luego de un par de anos trabajando principalmente con .NET en todos sus sabores (ASP.NET, WinForms, Compact Framework), el mes pasado empece un proyecto que me ha llevado de nuevo a utilizar VFP como ambiente principal de desarrollo.

Y la verdad, ha sido como volver a casa. Una casa renovada, eso si, pues el proyecto esta basado en VFP 9 por lo que he podido hacer uso de varias de las nuevas opciones que vinieron en esa excelente versión.

Paradójicamente, cada vez mas me encuentro a mi mismo aplicando en VFP conceptos que aprendí en .NET y específicamente en C#. En lugar de constantes he simulado enumeraciones usando la clase Empty y la función ADDPROPERTY, en lugar de usar una variable global donde almacenar el handle de conexión devuelto por SQLEXEC() me encontré representando la conexión con una clase llamada SqlConnection. Asi que, cuando antes hacia:

LOCAL nConn,nResult
nConn = 0

TRY
nConn = SQLSTRINGCONNECT(cConnStr)
nResult = SQLEXEC(nConn,cSQL,cCursor)

CATCH TO ex

FINALLY
IF nConn <> 0
SQLDISCONNECT(nConn)
ENDIF

ENDTRY

ahora hago:

LOCAL oConn
oConn = CREATEOBJECT("SqlConnection",cConnStr)

TRY
oConn.Open()
oConn.Send(cSQL,cCursor)

CATCH TO ex

FINALLY
IF oConn.State = connectionState.Opened
oConn.Close()
ENDIF

ENDTRY

Cómico verdad? pero lo cierto es que no solamente yo me siento mas cómodo con la 2da versión, supongo que porque me recuerda a lo que he venido usando en los últimos anos, sino que ademas creo que el código final es mas legible y mucho mas reusable y encapsulado también.

Por cierto, si alguien sabe como simular el concepto de Interfaces en VFP, que me avise, porque esa es una de las cosas de .NET que quisiera tener en VFP !!


4 comentarios:

fedewein dijo...

q haces victor. no entiendo nada lo q pusiste jaja pero te busque porque desapareciste del facebook y queria saber si estabas bien con todo lo q esta pasando por alla. saludos! fede (federico weinstabl)

Guillermo Arias dijo...

Buen día, le saluda Guillermo Arias, con código de cliente 1FF94CE5.

Tengo un problema con el DosPrint4, cuando quiero imprimir me dice que ya existe cierto archivo “.DPF” y pregunta si deseo sobreescribirlo. Este mensaje es incómodo, ¿cómo puedo evitar que aparezca?.

Esto no sucedía antes, pero ahora incluso en ciertas ocasiones no funciona el DosPrint4

Quiero saber si hay actualizaciones de tu software para imprimir en impresoras matriciales.

Atentamente
-------------------------------------------------------------
Guillermo Arias Tipismana
Lima- Perú
Tlf 01-6284348 – 998436047

Guillermo Arias dijo...

Olvidaba indicar mi email: guillermo.arias@factronsoft.com , guillermoariast@hotmail.com

Hasta luego
Guillermo.
Lima

Jorge González dijo...

Hola Victor.
He llegado a tu blog por medio de un Link de Fernando D Bozzo
ME ha llamado la atención lo simplificado de llamar una conexión a un servidor.
En mi caso estoy trabajando con Postgres desde VFP 9.0, tengo estás líneas para hacer la conexión:

*!* Localhost Proyectos
lcConc='DRIVER={POSTGRESQL ANSI};DATABASE=my_database;SERVER=localhost;PORT=5432;UID=postgres;PWD=pass;'

Store Sqlstringconnect(m.lcConc, .T.) To nConexion
*-*? nConexion
If nConexion < 1
= Aerror( laError )
Messagebox(;
"Error en conexión con el servidor" + Chr(13)+ ;
"Nº de Error: " + Transform( laError( 1 ) ) + Chr(13)+ ;
laError( 2 ) + Chr(13)+ ;
laError( 3 ), 0 + 16, "Atención!" )
Cancel
ENDIF

Y las he reemplazado por las tuyas:

LOCAL nConexion
nConexion= CREATEOBJECT("SqlConnection",lcConc)

TRY
nConexion.Open()
nConexion.Send(cSQL,cCursor)

CATCH TO ex

FINALLY
IF nConexion.State = connectionState.Opened
nConexion.Close()
ENDIF

ENDTRY

Pero al correrlo me sale un error que dice:
Class definition SQLCONNECTION in not found.
que estoy planteando mal?