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 !!