CursorAdapter
Publicado por Saul (El Guatemalteco...) (728 intervenciones) el 16/07/2008 22:06:25
Hola amigos busque informacion de CursorAdapter.. esta rutina seme hizo muy bien.
ya los ejemplos que trae el fox y tambien estan buenisimos.
Bueno la cuestion es esta. aqui alle este ejemplo
http://www.c-dev.net/es/vfp/vfp_cursoradapter.htm
y lo modifique con mis datos pero por alguna razon no me enlaza los datos los verifique ya con el ejemplo del fox y tampoco funciona.
Tengo dos preguntas y me gustaria me den sus comentarios.
1.- Tengo un sistema ya terminado, tengo que trabajar CLIENTE-SERVIDOR con SQL Server y lo que hice fue hacer unos SPT y pues me funciono bien tube que cambiar alguna codificacion pero no mucha y pues corre bien, loque veo es que de esta forma no se me mondra tan lento mi sistema con datos.
2.- Ya probe tambien una opcion de SPT grabables como si fueran VISTAS REMOTAS esta opcion no se si realmente me funcionara en cuanto a que la informacion que tengo ya enmi base es demasiada y no quiero que se me ponga lento el sistema. Pero la ventaja es que con esta forma pues no tengo que cambiar ya casi nada de la antigua formaque NATIVA.
3.- Y por ultimo tengo esta opcion de CursorAdapter que se ve buena pero por alguana razon ami no me funciona ya probe tambien hacerlos con el entorno de mis form y tampoco.
La idea que tengo yo es hacer un software que tan solo con cambiar algunas lineas me cambie de base de datos si fuera necesario.
Gracias. por sus comentarios
*[ 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 = "NATIVE"
Flags = 0
BreakOnError = .T.
Name = "Native"
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 = .NULL. &&''sqlstringconnect(cStrCnx)
This.Tag = "d:sistemasDbDBase.dbc"
***</DataSource>
*** End of Select connection code: DO NOT REMOVE
*** 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
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
AERROR(z)
MESSAGEBOX("Error en la clase caBase" + CHR(13) + ;
TRANSFORM(nError) + CHR(13) + ;
cMethod + CHR(13) + ;
TRANSFORM(nLine) + CHR(13) + ;
z[2] )
ENDPROC
ENDDEFINE
*
*-- EndDefine: camyschema
**************************************************
*[ caVendors.prg - R. Fynn Set2007
*[ Clase para el manejo de la tabla Vendors
DEFINE CLASS caVendors AS caBase OF caBase.prg
SelectCmd = "See CursorFill"
CursorSchema = "NOMBRE_BAN C(64), CADIGO_BAN C(3)"
Alias = "nativecursor"
Flags = 0
FetchSize = -1
KeyFieldList = "nativecursor"
Tables = "bCatalogoBancos"
UpdatableFieldList = "NOMBRE_BAN, CADIGO_BAN"
UpdateNameList = "NOMBRE_BAN bCatalogoBancos.NOMBRE_BAN, CADIGO_BAN, bCatalgoBancos.CADIGO_BAN"
Name = "Native"
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
*** 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
ENDDEFINE
*
*-- EndDefine: cavendors
**************************************************
*[ caTest.prg programa de testing del uso de CursorAdapter
*-- Ubico las clases de CursorAdapter
SET PROCEDURE TO caVendors
*-- Creamos una variable con el string de conexión al motor de base de datos
*-- Lo ideal es rescatar esta información de un archivo encriptado que contenga los parámetros de conexión
*cStrCnx = "DATABASE=booking;DRIVER={MySQL ODBC 3.51 Driver};OPTION=131072 ;PWD=miClave;PORT=3306;SERVER=localhost;UID=root"
*cStrCnx = 'Driver={SQL Server};Server=' + '(local)' + ';Database=logistica_sde;UID=conta;PWD=conta'
*-- Instanciamos un objeto Vendor de tipo CursorAdapter
oVendors = CREATEOBJECT("caVendors")
*-- BROWSE - Poblamos el cursor y los examinamos
ovendors.CursorFill
BROWSE
*-- SELECT
*-- Hacemos una búsqueda. Parametrizamos la cláusula del where.
*-- En este ejemplo buscamos los vendors que comiencen con jota. Se recomienda no usar comandos nativos
*-- del motor de base de datos y si usar SQL ansi para poder migrar entre motores sin problemas de compatibilidad.
oVendors.SelectCmd = "select * from vendors where name like '%J%'"
oVendors.CursorFil
BROWSE
*-- INSERT / UPDATE
*-- recordamos que en la clase caVendors la propiedad alias se llama igual que la tabla en la base de datos
SELECT vendors
APPEND BLANK
*-- El update lo podemos usar simplemente con los replace sobre el registro de la tabla seleccionado.
REPLACE vendorsid WITH 100
REPLACE name WITH "Alvaro Gomez"
REPLACE address WITH "Av. Continental 7700"
REPLACE phone WITH "598-2-700 9090"
REPLACE countryid WITH 31
BROWSE
IF TABLEUPDATE(.T.)
MESSAGEBOX("Registro agregado correctamente",64,"CA")
ELSE
AERROR(laErr)
MESSAGEBOX("Ocurrió un error el agregar el registro. " + laErr[2],16,"CA")
ENDIF
*-- SELECT
*-- buscamos el registro recien agregado en la tabla
oVendors.SELECTCMD = "select * from vendors where vendorsid = 100"
oVendors.CURSORFILL
BROWSE
*-- DELETE
*-- una vez ubicado el registro lo eliminamos.
DELETE
*-- recordamos que la propiedad BufferModeOverride de la clase padre caBase está en 5.
*-- por lo cual debemos implícitamente grabar o revertir las acciones. Esto se puede cambiar, no es recomendable
TABLEUPDATE(.T.)
*-- SELECT
*-- verificamos que se eliminó el registro
oVendors.SELECTCMD = "select * from vendors"
oVendors.CURSORFILL
BROWSE
*-- CLOSE
*-- finalizamos de trabajar con esta tabla. Cerramos el cursor que está abierto
IF USED("vendors")
USE IN vendors
ENDIF
*-- y como vendors es un objeto de tipo, lo destruimos.
oVendors = NULL
ya los ejemplos que trae el fox y tambien estan buenisimos.
Bueno la cuestion es esta. aqui alle este ejemplo
http://www.c-dev.net/es/vfp/vfp_cursoradapter.htm
y lo modifique con mis datos pero por alguna razon no me enlaza los datos los verifique ya con el ejemplo del fox y tampoco funciona.
Tengo dos preguntas y me gustaria me den sus comentarios.
1.- Tengo un sistema ya terminado, tengo que trabajar CLIENTE-SERVIDOR con SQL Server y lo que hice fue hacer unos SPT y pues me funciono bien tube que cambiar alguna codificacion pero no mucha y pues corre bien, loque veo es que de esta forma no se me mondra tan lento mi sistema con datos.
2.- Ya probe tambien una opcion de SPT grabables como si fueran VISTAS REMOTAS esta opcion no se si realmente me funcionara en cuanto a que la informacion que tengo ya enmi base es demasiada y no quiero que se me ponga lento el sistema. Pero la ventaja es que con esta forma pues no tengo que cambiar ya casi nada de la antigua formaque NATIVA.
3.- Y por ultimo tengo esta opcion de CursorAdapter que se ve buena pero por alguana razon ami no me funciona ya probe tambien hacerlos con el entorno de mis form y tampoco.
La idea que tengo yo es hacer un software que tan solo con cambiar algunas lineas me cambie de base de datos si fuera necesario.
Gracias. por sus comentarios
*[ 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 = "NATIVE"
Flags = 0
BreakOnError = .T.
Name = "Native"
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 = .NULL. &&''sqlstringconnect(cStrCnx)
This.Tag = "d:sistemasDbDBase.dbc"
***</DataSource>
*** End of Select connection code: DO NOT REMOVE
*** 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
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
AERROR(z)
MESSAGEBOX("Error en la clase caBase" + CHR(13) + ;
TRANSFORM(nError) + CHR(13) + ;
cMethod + CHR(13) + ;
TRANSFORM(nLine) + CHR(13) + ;
z[2] )
ENDPROC
ENDDEFINE
*
*-- EndDefine: camyschema
**************************************************
*[ caVendors.prg - R. Fynn Set2007
*[ Clase para el manejo de la tabla Vendors
DEFINE CLASS caVendors AS caBase OF caBase.prg
SelectCmd = "See CursorFill"
CursorSchema = "NOMBRE_BAN C(64), CADIGO_BAN C(3)"
Alias = "nativecursor"
Flags = 0
FetchSize = -1
KeyFieldList = "nativecursor"
Tables = "bCatalogoBancos"
UpdatableFieldList = "NOMBRE_BAN, CADIGO_BAN"
UpdateNameList = "NOMBRE_BAN bCatalogoBancos.NOMBRE_BAN, CADIGO_BAN, bCatalgoBancos.CADIGO_BAN"
Name = "Native"
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
*** 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
ENDDEFINE
*
*-- EndDefine: cavendors
**************************************************
*[ caTest.prg programa de testing del uso de CursorAdapter
*-- Ubico las clases de CursorAdapter
SET PROCEDURE TO caVendors
*-- Creamos una variable con el string de conexión al motor de base de datos
*-- Lo ideal es rescatar esta información de un archivo encriptado que contenga los parámetros de conexión
*cStrCnx = "DATABASE=booking;DRIVER={MySQL ODBC 3.51 Driver};OPTION=131072 ;PWD=miClave;PORT=3306;SERVER=localhost;UID=root"
*cStrCnx = 'Driver={SQL Server};Server=' + '(local)' + ';Database=logistica_sde;UID=conta;PWD=conta'
*-- Instanciamos un objeto Vendor de tipo CursorAdapter
oVendors = CREATEOBJECT("caVendors")
*-- BROWSE - Poblamos el cursor y los examinamos
ovendors.CursorFill
BROWSE
*-- SELECT
*-- Hacemos una búsqueda. Parametrizamos la cláusula del where.
*-- En este ejemplo buscamos los vendors que comiencen con jota. Se recomienda no usar comandos nativos
*-- del motor de base de datos y si usar SQL ansi para poder migrar entre motores sin problemas de compatibilidad.
oVendors.SelectCmd = "select * from vendors where name like '%J%'"
oVendors.CursorFil
BROWSE
*-- INSERT / UPDATE
*-- recordamos que en la clase caVendors la propiedad alias se llama igual que la tabla en la base de datos
SELECT vendors
APPEND BLANK
*-- El update lo podemos usar simplemente con los replace sobre el registro de la tabla seleccionado.
REPLACE vendorsid WITH 100
REPLACE name WITH "Alvaro Gomez"
REPLACE address WITH "Av. Continental 7700"
REPLACE phone WITH "598-2-700 9090"
REPLACE countryid WITH 31
BROWSE
IF TABLEUPDATE(.T.)
MESSAGEBOX("Registro agregado correctamente",64,"CA")
ELSE
AERROR(laErr)
MESSAGEBOX("Ocurrió un error el agregar el registro. " + laErr[2],16,"CA")
ENDIF
*-- SELECT
*-- buscamos el registro recien agregado en la tabla
oVendors.SELECTCMD = "select * from vendors where vendorsid = 100"
oVendors.CURSORFILL
BROWSE
*-- DELETE
*-- una vez ubicado el registro lo eliminamos.
DELETE
*-- recordamos que la propiedad BufferModeOverride de la clase padre caBase está en 5.
*-- por lo cual debemos implícitamente grabar o revertir las acciones. Esto se puede cambiar, no es recomendable
TABLEUPDATE(.T.)
*-- SELECT
*-- verificamos que se eliminó el registro
oVendors.SELECTCMD = "select * from vendors"
oVendors.CURSORFILL
BROWSE
*-- CLOSE
*-- finalizamos de trabajar con esta tabla. Cerramos el cursor que está abierto
IF USED("vendors")
USE IN vendors
ENDIF
*-- y como vendors es un objeto de tipo, lo destruimos.
oVendors = NULL
Valora esta pregunta


0