ShouthwestFox
Inicio

PreConferencia

Encuentros

Vie 14 Mañana

KeyNote

Vie 14 Tarde

Drew Speedie

Sáb 15 Mañana

Sáb 15 Tarde

Dom 15 Mañana

Galerías

... a Conferencias

 
Anuncios






 
© PortalFox

Southwest Fox 2005

Pre Conferencias

Por Amby


 Es la mañana del 13 de octubre del 2005, amanece soleado y me dispongo a comenzar la primera jornada, en este caso, la jornada previa a la Conferencia Southwest Fox 2005. El hotel donde estoy hospedada no tenía servicio de desayuno; pero el café de al lado suplía esa ausencia. Desayuné, todo listo y ¡ a empezar la fiesta ! El evento se desarrolló en la Universidad Estatal de Arizona (ASU) en el Memorial Union. La Universidad es el corazón de la ciudad, hay edificios por doquier y muchos de los trabajadores de los servicios estudian en esta universidad.

En el segundo piso del Memorial Union estaban los organizadores, pasé a inscribirme. En la inscripción nos dieron dos libros de excelente calidad. Son: "What's New in Nine: Visual FoxPro's Latest Hits"  y ".NET for Visual FoxPro Developers". Yo los había leído los dos; pero no está mal.... teniendo a los autores presentes me llevaré una copia firmada ¡¡ yupi yupi !!

La mañana empezó con Utilizando Servidores COM de Windows (Using Windows Component Services (COM+)) por Craig Berntson

La sesión estuvo dividida en dos partes. Craig nos introdujo el tema y nos fue llevando con ejemplos hasta mostrarnos que aquello que parecía tan difícil podía a llegar a ser sencillo.

Los Component Object Model (COM) han sido utilizados desde hace muchos años, cada vez que automatizamos Word, Excel u Outlook, desde aplicaciones VFP, estamos trabajando con COM. Para crear un componente COM basta con definir una clase sin olvidar la cláusula OLEPUBLIC, que es la que indica al compilador que se va a crear un componente COM.

Un ejemplo de código para una clase Calculo que realice, entre otras funciones, el cálculo de media aritmética, puede ser:

DEFINE CLASS Calculo AS SESSION OLEPUBLIC
  FUNCTION Media(tnInferior AS Integer, tnSuperior AS Integer) AS Integer
    *** calcula la media artimética y devuelve su resultado
  ENDFUNC
ENDDEFINE

Luego, guardarla como un .PRG, por ejemplo BOCalculo y generarla como Servidor COM de subproceso único (Single-threaded COM server (DLL)). Cuando se genera un componente COM, se generan varias entradas del registros que apuntan a la carpeta y al archivo que se compiló. Se crea un archivo con el mismo nombre de la aplicación y extensión TBL que contiene datos muy interesantes que nos pueden ayudar a encontrar errores en la generación del COM (a mi una vez me pasó que estaba referenciando a otro proyecto y casi cuando ya me volvía loca, este archivo me dio la respuesta). Se llama type library y debe ser distribuido junto con las DLLs de VFP cuando distribuimos aplicaciones.

Para emplear el COM creado, utilice el ejemplo:

loCom = CREATEOBJECT(“BO.Calculo.Calculo”) && Instancia el COM 

A partir de aquí podemos emplear IntelliSense, llamar a sus propiedades y métodos, asignar nuevos valores, tal y como hacemos con cualquier otro objeto en VFP.

Vistos así, queda muy claro que es bastante sencillo, crear, compilar y utilizar COM desde VFP. Seguimos adelante...¿qué es DCOM?

En el caso de Distributed Component Object Model (DCOM), el componente se instala se instala en un PC remoto, generalmente en un servidor. El proceder es bastante similar, sólo que en este caso la comunicación entre la petición y el resultado pasa a través del servidor. Una ventaja del empleo de DCOM sobre COM es que el componente está centralmente localizado en el servidor, por lo que no será necesario distribuirlo, los cambios en el componente será necesario actualizarlos únicamente en el servidor.

Ajá, bien, seguimos avanzando ... y los COM+?

Los Windows Component Services, también denominados COM+, trabajan de igual forma que los DCOM, aunque los COM+ pueden trabajar en modo desconectados.

Los COM+ brindan servicios adicionales a los DCOM, entre las que podemos enumerar: Administración, Seguridad, Control de transacciones, Activación justo a tiempo (JITA), componentes de cola, Balanceo dinámico de carga, etc.

Vimos un ejemplo de la creación de un componente dinámico. La única diferencia van a ser 3 líneas de código. Se crean otros objetos dentro de nuestro componente (empleamos CreateObject) y lo vamos a crear y destruir dentro de cada método que lo va a necesitar.

En este caso se selecciona Servidor COM de subproceso múltiple Multi-threaded COM server (DLL) . Sobre las diferencias de estos enfoques se puede decir que hay varios modelos, por ejemplo en el Apartment-Model Threaded varios componentes conviven como si fueran apartamentos de un mismo edificio; pero a su vez están separados, no conviven juntos.

Antes de utilizarlos hay que instalar el componente COM+. Para ello empleamos el Servicio de Componentes. No me voy a detener porque fue muy detallado en el artículo Web Services y VFP8 publicado por Ignacio Amorós Cantó (Alicante, España) y que podemos ver en  http://www.portalfox.com/article.php?sid=1074

En este caso crea una nueva aplicación con seguridad a nivel de usuario. Cuando se ejecuta desde VFP se ve que el componente comienza a rotar y esto ocurre justo al ejecutar el comando Createobjetct que crea una instancia del componente, se detiene asignando NULL

Como hemos dicho, los objetos COM+ emplean instalación justo a tiempo (JITA) y trabajan sin estado. Esto significa que en realidad la función CREATEOBJECT()  no instancia el componente en realidad. En su lugar, conecta el runtime del COM+, quien a su vez, instancia el componente, a través del uso de un proxy. Si ocurre un llamado a SetComplete() o SetAbort() el COM+ libera el componente; pero el proxy se mantiene. Por eso los siguientes llamados ocurrirán mucho más rápido porque la Activación justo a tiempo mantendrá una copia del componente en memoria por un período de tiempo después de haberlo "cerrado".  Sobre el trabajo sin estado podemos decir que los componentes COM+ son capaces de adaptarse a miles de usuarios, con sus costes de rendimiento implicados, en dependencia del código en los métodos Init y Destroy.

Para emplear estos COM+ es necesario tener otra aplicación del lado del Cliente. Esta aplicación también se instala utilizando Servicios de Componentes. Vimos este caso con un ejemplo.

La Seguridad es una parte muy importante en las aplicaciones. El runtime COM+ controla la seguridad por nosotros, desde allí es que se configura y no desde el programa de VFP. Está basada en roles, se asignan roles específicos a los usuarios, la aplicación COM+, los componentes e incluso a métodos dentro de ellos. Empleamos los grupos de Seguridad de Windows. En el ejemplo que vimos no había ningún control por parte de VFP, ni una línea de código, aunque Craig aclaró que se puede establecer unos mensajes para el control de errores.

Sobre las transacciones, Craig ha dicho: ..." las transacciones son las sombrillas bajo las cuales deben realizarse las actualizaciones seguras de los datos...." Deben garantizar una copia del original antes de actualizar, permitir deshacer todo y controlar el riesgo que significa modificar los datos.

Una transacción completa debe seguir cuatro reglas, llamadas ACIDity:

Atomicidad: Se realiza todo o nada
Consistencia: La transacción es una transformación correcta del estado del sistema.
Aislamiento (Isolation): Garantizar que de ser necesario se realiza el RollBack
Durabilidad: La actualización puede sobrevivir a los errores. Por ejemplo, si el servidor pierde la energía antes de que todas las tablas hayan sido actualizadas, aquellos cambios realizados son inmediatamente deshechas. Por ejemplo, las tracciones en VFP no cumplen con ACIDity porque no son duraderas.

Pues... nos hemos ganado un receso, no creen? ¡ Qué bien hemos empezado! Está muy interesante y aun nos queda hora y media del tema, dice Craig que seguiremos con las transacciones ... Salí a tomar aire ... en el pasillo estaba Rick Shummer acabadito de llegar, estuvimos conversando y de paso me firmó el libro, su dedicatoria fue: " Espero que disfrutes trabajando con VFP 9 y desarrollando aplicaciones" - Gracias Rick !!

Toca regresar a toda prisa ... creo que ya han comenzado ... uy si, espero no haberme perdido mucho.

Para las tracciones desde COM+ las bases de datos necesitan tener un Administrador de Recursos. VFP no tiene; pero puede participar en transacciones COM+ utilizando Compensating Resource Manager.

Existen ventajas en utilizar transacciones COM+:

  • Actualizar múltiples bases
  • Soporte para bases de datos como SQL Server y Oracle
  • Apto para el trabajo con Internet a través de TIP (Transaction Internet Protocol)
  • BYOT (Bring Your Own Transaction). Esto se realiza a través de Compensating Resource Managers y TIP.
     

Para trabajar las transacciones, El runtime COM+ emplea Microsoft Distributed Transaction Coordinator (MSDTC). Esto significa que las transacciones se controlan fuera de la Base de datos. Trabaja muy bien porque la transacción se realiza empleando un doble pase. En el primer pase, el MSDTC consulta cada base de datos, buscando si puede guardar los datos. Una vez que cada base de datos ha contestado, comienza el segundo pase, en el que, si todas han respondido que pueden se actualizan y si al menos alguna no puede, pues se realiza rollback de cada una de ellas.

Retomemos el Compensating Resource Managers (CRM). Habíamos visto hasta ahora el Resource Manager (RM), el que está fuertemente integrado en el Distributed Transaction Coordinator (DCT). El CRM proporciona una vía rápida y fácil de integrar los recursos de aplicaciones en el DCT. Consiste en un par de servidores COM. El primero, CRM Worker, escribe el log de las acciones que deben realizarse en caso de tener que recuperarse o ejecutar la acción principal, como puede ser añadir un registro. El segundo es el CRM Compensator, que se instala por el sistema CRM al final de la transacción, ya sea exitosa o revocada. La siguiente figura muestra este proceso.

¿Cómo ocurre el proceso?
  • La aplicación instancia el objeto de negocio. El objeto de negocio se ejecuta dentro del COM+.
  • El objeto de negocio instancia el CRM Worker.
  • El CRM Worker instancia el Log Control, que como hemos dicho es parte del COM+. El nombre del Servidor COM para el Compensador se pasa como parámetro al Log Controller.
  • El objeto de negocio llama a los métodos del objeto COM+ Context para realizar o abortar la transacción.
  • El COM+ llama al Log Controller para realizar o abortar la transacción.
  • Debido a que el CRM Compensator tiene un gancho a los eventos del Log Controller, es automáticamente llamado y controla la realización o no de la transacción.

Para configurar el CRM en un COM+ volvemos al Asistente y en la ficha Avanzados marcamos la casilla Habilitar los administradores de compensación de recursos (Enable compensating resource managers). De todo esto Craig ha mostrado ejemplos.

Sobre Componentes asincrónicos y Componentes en cola (Queued Components) . Existen algunas ventajas de emplear componentes en cola, ya que minimiza los efectos de la desconexión de una estación de trabajo o el servidor. Son frecuentemente llamados Messaging Components, porque funcionan mediante la transmisión de mensajes. La diferencia se puede ver comparando estas figuras:

En este caso, una aplicación síncrona,  la estación de trabajo llama al primer componente Orders que escribe en la DBC Orders y a su vez llama al componente Shipping. Todo el proceso ocurre en una única transacción.

Observe que están involucradas varias transacciones. La estación de trabajo  envía mensajes a la cola intentando acceder al componente  Orders. Cuando Orders está disponible recoge el mensaje, comienza la transacción y escribe los datos en la DBC Orders. Escribe un mensaje en otra cola que es leído por el componente Shipping para actualizar la DBC Shipping. Cada cola es a su vez transaccional incluso cuando los componentes no están disponibles.

Las barras amarillas son los denominados Recorders. La infraestructura del COM+ dispone de recorder, listener y player. Lo que ocurre es que cuando se activa un componente un listener oye que se ha grabado un mensaje por el recorder al Componente y lo pasa al player. El player es quien ejecuta el mensaje en el componente.

Los Queued Components utilizan Microsoft Message Queue (MSMQ), por lo que hay que asegurarse de tenerlos bien instalados.

Como conclusiones Craig nos dice que Windows brinda muchos servicios que permiten robustecer nuestras aplicaciones y son muy fáciles de diseñar, desarrollar, controlar y configurar. Los COM+ estarán en uso durante mucho tiempo aun en las futuras tecnologías, por lo que conviene entenderlos y aplicarlos correctamente.

Hemos terminado. ¿Qué les ha parecido? A mi me ha parecido muy profundo, la mayoría de las cosas me son desconocidas, habrá que retomarlas, estudiar y probar todo para hacerse con estos temas. Quisiera poder traducir este tema, a ver si podemos ... aun no lo se.

Hay un debate y no me muevo de mi asiento. Para esta segunda Conferencia Fox en EE.UU., me propuse prestar más atención a los nombres de las personas que aparecen en las credenciales, porque la vez anterior pude reconocer prácticamente solo a los gurús. Pues mi primera sorpresa fue al final de esta sesión. Uno de los presentes estaba muy activo debatiendo con Craig Berntson y cuando miro el nombre era Craig Boyd, ¡ qué emoción ! Craig Boyd es hoy por hoy una de las figuras más activas en la comunidad, he tenido el placer de intercambiar correos con el y poder traducirle algunos trabajos. En cuanto tenga un tiempito le dedicaré un artículo en la sesión "Conoce a los gurús de Visual FoxPro"

Pues terminó el debate y nos conocimos. Me dijo estar muy satisfecho con las traducciones e inmediatamente me preguntó de qué nos preocupaba a los hispanohablantes en materia de VFP. Ups ! Me tomó un poco por sorpresa; pero bueno,....  le comenté de los debates en los foros y de las dudas que esperamos esclarecer en esta Conferencia. Le dije que esperábamos que las noticias sobre el futuro del Fox fueran buenas. Me aseguró que si .... ¡ Bien !

Almorcé en la propia Universidad, algo rápido... adivinan? Exacto... una hamburguesa ... la primera de muchas ... Pasé por el hotel que está como a 10 minutos de la Universidad, dejé mis cosas, me refresqué un poco y lista !!! De nuevo a clases, esta vez a ver a un conocido de PortalFox, Andy Kramek.

Así pues, tomo asiento en espera del tema Diseñar e implementar Capas de acceso a datos en Visual FoxPro, le pedí a Andy Kramek, que nos hiciera una foto a los asistentes.

En ocasiones programamos aplicaciones de escritorio con tablas nativas de VFP, sin considerar que vamos a necesitar en el futuro otro contenedor para nuestros datos. Pero siempre hay que tener en cuenta la posibilidad de la necesidad de migrar.

Entre las ventajas de VFP como contenedor de Base de datos tenemos: Es perfectamente capaz de realizar todas las operaciones estándar (añadir, actualizar y eliminar registros), tiene un buen motor SQL y brinda un excelente soporte para las vistas, procedimientos almacenados, valores predeterminados, etc. Debemos admitir que los desencadenantes son bastante frustrantes; pero tienen un rango de posibles alternativas que lo hacen una utilidad significativa. VFP no requiere licencia a nivel de usuario final. Entre las desventajas se pudiera decir que tiene un tamaño limitado, ningún archivo puede exceder 2 GB, lo que ya es bastante grande. Pero, si comparamos los 2 GB o 4 GB por base de datos que brinda MSDE y SQL Server respectivamente vemos que los límites de VFP son muy generosos.

¿Por qué entonces movernos hacia datos remotos? Pues básicamente por tres razones fundamentales que veremos detenidamente.

  • Seguridad de los datos
  • Integridad de los datos
  • Accesibilidad de los datos

Sobre la seguridad de los datos, vemos que hay dos niveles que tenemos que considerar a la hora de comparar la seguridad de VFP con un servidor remoto. Lo primero es el aspecto físico. Las tablas de datos se guardan en discos, como archivos separados, los que son muy vulnerables a daño accidental o intencionado. Además donde quiera hay un visor de DBF, en Google con una búsqueda no muy estricta hay más de 300 utilidades, gratis, descargables, con complejidad variable, que deja muy vulnerables a las DBF. Aunque se pueden encriptar los datos siguen siendo inseguras. Por su parte, las tablas remotas garantizan la seguridad física, sólo es posible eliminar los datos eliminando por entero la Base de datos; pero ya esto es más complejo, se requiere de login para acceder primero al servidor y otro para la Base de datos. Incluso se puede controlar el acceso a una tabla o campo determinado.

La integridad de los datos está relacionada con el uso que se hace de los datos. Las aplicaciones que trabajan contra servidores no trabajan directamente con los datos, sino con copias locales, o extractos. Las transacciones, reglas y desencadenantes, se emplean por las bases de datos para asegurarse de que sea mantenida la integridad. La regla básica es que la Base de datos sea ACID.

La accesibilidad es un punto clave, por una parte el acceso a las tablas de VFP se produce de forma directa, esto es tan válido tanto para el desarrollador como para el usuario y esto puede ser bueno y malo según se mire.

Pero no todo son ventajas, entre las desventajas de una Base de datos remota podemos citar:

  • No hay acceso directo a los datos
  • No existen índices lógicos
  • Hay costes adicionales de implementación de un Servidor dedicado
  • Existen costos de equipamiento (hardware)
  • Costos de software
  • Mantenimiento

Vimos aspectos relacionados con el tipo de conexión que podemos utilizar: OLE DB u ODBC, para este caso, no tiene importancia cuál de ellas escoger. Luego pasamos al proceder para conectarnos: puede ser con una cadena de conexión explícita (a veces se llama conexión DNSLess) y la función SQLSTRINGCONNECT o un DataSource Name (DSN) y la función SQLCONNECT(). Al final el resultado es el mismo.

Los controladores de conexión (connection handles) son los valores devueltos luego de establecer la conexión.

Andy comentó sobre las funciones que desde VFP soportan SQL Pass Through y sobre las transacciones, aclarando que en este caso, el valor predeterminado es que sean controladas desde el servidor.

En este punto, Andy Kramek comienza a explicar cómo se diseñó la capa Data. Lo primero fue presentar el modelo lógico para la aplicación que se muestra a continuación.

Aquí vemos las capas (tiers) definidas de forma tal que pueden estar físicamente separadas y los estratos (layer) identifican los componentes funcionales dentro de las capas. Los mensajes van sólo de izquierda a derecha y de un estrato a otro estrato. Las respuestas siempre van de derecha a izquierda y no pueden saltarse un estrato.

Vamos a asumir que la capa presentación (Presentation Tier) es una aplicación VFP. Para controlar las conexiones podemos crear un controlador que se encargue de controlar todos los tipos de conexiones y funcione como una caja cerrada a la que accedan todas las conexiones a Bases de datos, o por el contrario crear subclases que se conecten por separado a cada Base de datos. Ahora, para controlar el SQL agregamos otro objeto en nuestro modelo al que nos referimos como "Behavior" y puede crear una subclase específica para controlar en comportamiento de diferentes versiones de una base de datos.

El diseño para la clase Data ha quedado finalmente de esta forma

Los mensajes entre la presentación y la capa media se realiza a través de la referencia que tiene el objeto al Data Manager. El objetivo de la capa Data es la implementación del diseño lógico para brindar una interfaz de programación entre la aplicación de VFP y sus datos. Los componentes resultantes son: DataSet, Cursores, DataManager, Connection Manager y Behavior Manager. El desarrollador va a interactuar sólo con los dos primeros.

Vimos con ejemplos, el funcionamiento de la clase Data tanto para VFP como para SQL Server

  • Crear logins y DSNs
  • Establecer la conexión al metadato
  • Crear definición de cursores
  • Crear definición de dataset
  • Instanciar el administrador de datos
  • Crear el dataset
  • Utilizar el dataset en el código

Esta clase está lista para ser utilizada, sólo será necesario indicar la DSN y cambiar las propiedades que le permitan pasar la DBC a un Servidor remoto SQL.

Pasamos al ejemplo concreto, Andy nos muestra el funcionamiento de la clase, en este caso muestra los resultados cambiando las bases de datos. Es interesante como se puede ver la diferencia que existe entre la búsqueda en VFP y en SQL Server. Mientras la búsqueda en VFP es con reconocimiento de mayúsculas y minúsculas, en SQL no lo es. Entonces, si buscamos por ejemplo la cadena BA para inicio de ciudad, VFP devuelve 0 (porque las ciudades solamente tienen la primera letra en mayúscula), mientras SQL devuelve un conjunto de datos. Todos estos elementos han de ser tenidos muy en cuenta cuando se trabaja con múltiples orígenes de datos.

Otro ejemplo, la clase Cursor Manager, que nos posibilita crear conexiones y configurar el contenido del comando SELECT SQL. Funciona para una sola tabla, la propuesta es crear tantas sentencias SQL como tablas haya que procesar.

Este trabajo es excelente y si nos dedicamos a buscar un poco en su interior, tenemos una información muy valiosa tanto para aplicar en los desarrollos como para aprender buenas técnicas de programación. Con la generosidad que le caracteriza, Andy Kramek ha autorizado la traducción de esta sesión y del resto de las sesiones que presentó en esta conferencia. Junto con la traducción, publicaremos estas clases.

A mí me ha gustado mucho esta primera parte, vamos a descansar un poquito. Aprovecho para comprar algo de beber. Este edificio de la Universidad Estatal de Arizona está dotado de varias cafeterías, hamburgueserías, cafés, una heladería y hasta un pequeño supermercado. Los estudiantes tienen para escoger. Me quedan unos minutos y exploro escaleras abajo... más cafeterías, un salón bien grande con unos butacones, también grandes y un televisor ... siii adivinaron... era grande también. Estaba vacío; pero yo podía imaginar a los muchachos disfrutando de un partido de fútbol rugby. En la sala contigua hay un grupo de mesas de billar y un poquito más allá varias PC conectadas a Internet... interesante, es bueno saberlo, anoche no me pude conectar desde el hotel ... Hay que regresar a clases... a ver que otras cosas interesantes nos cuenta Andy.

Si necesitamos convertir una aplicación actual para ejecutarla; pero ahora, desde una Base de datos remota, debemos tener en cuenta un grupo de elementos: cambios en la arquitectura del sistema, acceso y control de los datos y retirar la confianza en la funcionalidad de VFP.

Las aplicaciones más fáciles de migrar son aquellas diseñadas y desarrolladas en tres capas; pero esto no ocurre en la mayoría de los casos, lo más común es que están generadas utilizando directamente el motor de datos nativo, el empleo del entorno de datos, los comandos explícitos para abrir y cerrar tablas (use y use in). Por tanto hay que ver la implicación que tendrá sobre la estructura de la aplicación: Hay que saber: ¿Dónde y cómo se abren y cierran las tablas? ¿Cómo se obtienen los datos para ser mostrados en la interfaz de usuario? ¿Cómo se guardan los cambios de datos? Como se puede suponer, puede variar la magnitud de la tarea, desde rehacer la aplicación en su totalidad hasta aprovechar de un diseño en 3 capas y traspasarlos sin grandes complicaciones. También depende de la frecuencia de funciones como RECNO() y los índices. Y otras menos intuitivas como son ABS, CEILING, LOG,  LOWER, LTRIM, RIGHT, RTRIM, SOUNDEX, SPACE, STR, STUFF, UPPER. Todas estas devuelven resultados diferentes en tablas de VFP y SQL Server. Un grupo de funciones y operadores tienen equivalencia: ejemplo, ASC() y ASCII(), CHR y CHAR(), y muchas más, y todas deben ser tomados en cuenta.

Por eso, es necesario determinar, cuanto antes mejor, el esfuerzo que implicará el traspaso de los datos de un contenedor a otro.

Andy Kramek se refirió a cómo podemos Convertir una Base de datos existente, aclarando que convertir una DBC es muy diferente a convertir una aplicación, lo que es totalmente desaconsejado. Para la conversión de los datos se puede tomar la DBC de VFP y recrear una igual en el servidor, o extraer los datos desde una DBC VFP y migrarlos a una nueva estructura creada en el servidor. En realidad, lo que propone Andy es combinarlos, por una parte, crear una DBC intermedia en VFP con la estructura que se corresponda a la estructura que existirá en el servidor y hacer desde VFP todos los cambios necesarios, luego actualizar esta DBC y sólo entonces pasar desde aquí los datos al servidor.

Para obtener la estructura actual de la DBC en VFP existen funciones como: ADBOBJECTS(), AFIELDS(), ATAGINFO(), DBGETPROP().

Para crear una estructura de campos que se corresponda con la DBC destino hay que tener en cuenta la denominación de los tipos, abreviatura y sobre todo los tipos de datos que admite, por ejemplo para datos lógicos (L)  VFP logical y el equivalente en SQL Server es bit. De igual forma hay que tener en cuenta los tipos de índices existentes: Primary en VFP se corresponde a Clustered Unique de SQL Server. Para terminar hay que restablecer las relaciones, para ello emplearemos ALTER TABLE mitabla DROP... Sobre los procedimientos almacenados y desencadenantes no hay forma de hacerlo genéricamente, habría que ver en cada caso, por problemas de sintaxis y equivalencias entre funciones. Por ejemplo: ISNULL() es una función válida tanto en T-SQL y VFP, pero en T-SQL es equivalente con la función NVL() de VFP). Además, hay diferencias en el funcionamiento y pudiera ocurrir que lo que está programado en un procedimiento almacenado generar un desencadenante y esto pudiera no ser lo deseado.

Para pasar los datos tener en cuenta que VFP 9.0 incorporó tipos de campos nuevos y la función cast que permite convertir de una vez tipos de datos.

Antes de terminar, Andy reconoce que no existe un único remedio para convertir una DBC existente en otra remota, se puede proceder de formas diferentes, dependiendo también de la complejidad de la DBC. La creación de la capa de datos intermedia es sólo la mitad del problema. Los ejemplos que nos presentó ellos los están utilizando con aplicaciones y proyectos reales. En una última fase, nos dice que como siempre, en todas las tareas complejas, dividir el problema en tareas pequeñas y tratar cada una por separado nos permitirá avanzar mucho sin realizar un gran esfuerzo.

Un agradecimiento y una foto con Andy, una pequeña charla y salgo conversando con  Cor Bloemendaal, que ha venido desde Holanda, nos vamos a tomar una cerveza para hacer tiempo en lo que empieza el emocionante encuentro con los ponentes. De camino nos encontramos con nuestro compañero SysOp de PortalFox Esparta Palma de México, quien de momento no se nos une, quedamos en vernos luego. Esparta comentó que presenció: VSS/VFP IDE Integration and What's New in Visual SourceSafe 2005 for the VFP Developer  - Bill Fields.

Pues eso, nos tomamos cerveza y ice tea respectivos... creo que no les he contado que tengo un dolor de cabeza, que me lo traje de Madrid y no me quiere abandonar. Y bueno, se nos unieron otros participantes y como suele suceder se habló de experiencias, proyectos, anhelos y mucha expectativa por la Conferencia y por el futuro de Visual FoxPro.

Nos vemos en la próxima entrega, Reporte de la Conferencia Southwest Fox 2005  - Encuentro con ponentes.

Saludos,

Ana
www.amby.net

 


Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2007 PortalFox. Todos los derechos reservados.