2. El CursorAdapter no es más que una nueva clase, pero muy importante, ya que con ella se puede gestionar todo acceso a datos, tanto local como remoto, el cursorAdapter soporta diferentes orígenes de datos, los cuales pueden ser aplicados dinámicamente y la compartición de dichos orígenes de datos solamente se encontrará limitada por la propia tecnología. El cursor adapter soporta los siguientes orígenes de datos: Nativo (Visual Fox Pro) Open Data Connectivity (ODBC) ActiveX Data Object (ADO) Extensible Makup Lenguaje (XML)
3. Debemos entender, a esta nueva clase como un punto de entrada, ya que como todo tiene sus deficiencias, pero por ello, no deja de ser noble en su propio concepto y mantener su grandeza para el desarrollo. Si sabemos darle este enfoque, se puede obtener unos resultados majestuosos en la capa de acceso a datos, ya sea para aplicaciones cliente/servidor, posibilidades de movernos en multitud de bases de datos, etc. Y todo esto interrelacionado; con que a partir de esta versión podemos crear clases partiendo del contenedor DataEnvironment, se pueden crear verdaderos sistemas, con versatilidad, robustez y potencia en lo que a la capa de acceso a datos se refiere. Otra de las grandes ventajas que ofrece el CursorAdapter es que mantiene la interacción con los comandos TableUpdate y TableRevert, esto es realmente muy bueno, ya que no perdemos la generosidad y dimensión de dichos comandos, sobre todo cuando queremos dar robustez a la integridad de nuestros datos e independientemente del origen de datos.
4. Partiendo de la creación de la base de datos lo cual llevará todas las tablas de nuestro sistema, la idea principalmente es heredar de la clase Cursor Adapter, extender su funcionalidad y hacerla genérica, vamos a crear un objeto llamado caBase que implemente esta funcionalidad. La potencia de Cursor Adapter nos permite trabajar con cualquier tipo de conexión (remota, nativa, XML), en este ejemplo nos vamos a concentrar en trabajar con bases de datos remotas, particularmente con mySQL, aunque el ejemplo sirve perfectamente para cualquiera: Ejemplo práctico de cursor adapter en visual fox pro
5. Código fuente de la clase caBase *[ caBase.prg - R. Fynn Set2007 *[ Clase base de CursorAdapter *[ Las clases child heredan el tipo de conexión y los datos de la misma DEFINE CLASS caBase AS CursorAdapter *-- más adelante vemos de donde obtenemos el string de conexión en esta variable Tag = cStrCnx Height = 22 Width = 23 Alias = "" BufferModeOverride = 5 DataSourceType = "ODBC" Flags = 0 BreakOnError = .T. Name = "myschema"
6. PROCEDURE Init() *** Setup code: DO NOT REMOVE local llReturn do case case not pemstatus(This, '__VFPSetup', 5) This.AddProperty('__VFPSetup', 0) case This.__VFPSetup = 1 This.__VFPSetup = 2 case This.__VFPSetup = 2 This.__VFPSetup = 0 return endcase set multilocks on llReturn = dodefault() *** End of Setup code: DO NOT REMOVE *** Select connection code: DO NOT REMOVE ***<DataSource> This.DataSource = sqlstringconnect(cStrCnx) ***</DataSource> *** End of Select connection code: DO NOT REMOVE
7. *** Setup code: DO NOT REMOVE if This.__VFPSetup = 1 This.__VFPSetup = 2 endif return llReturn *** End of Setup code: DO NOT REMOVE ENDPROC PROCEDURE AutoOpen *** Setup code: DO NOT REMOVE if not pemstatus(This, '__VFPSetup', 5) This.AddProperty('__VFPSetup', 1) This.Init() endif *** End of Setup code: DO NOT REMOVE ENDPROC