FoxPro/Visual FoxPro - CursorAdapter

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:CursorAdapter

Publicado por alfredo  (2 intervenciones) el 17/07/2008 14:42:29
hola amigo, estoy incursionando en el tema de CURSORADAPTER, he logrado conectarme con la base de datos SQL-SERVER 2005, tambien he creado una pantalla para mantenimiento CREAR, MODIFICAR, ELIMINAR, pero mis problemas bienen en las validaciones, me explico si creo una cuenta normalmente en mi sistemas ya desarrollados puedo validar si la cuenta existe o no existe pero en el cursoradapter no puedo efectuar esta validacion, para esta operacion estoy utizando el comando SEEK,
pero me sale un mensaje que la base no tiene indices, lo curioso es que en la base de datos si esta el indice, pero en el entorno de datos el cursoradapter lo jala sin indices,
si tienes una pista que me pueda ayudar, porfavor enviame a mi correo.

gracias por tu atencion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CursorAdapter

Publicado por Saul (El Guatemalteco...) (728 intervenciones) el 17/07/2008 18:15:22
Sabes me encataria me dieras un ejemplo si lo tienes para poder ver yo tambien como lo hisite tu..

Amino no me funciona algo dever ner mal eso. pero no se que es.
te mando que hago yo cuando jalo unas vistar remotas.
luego de hacerlas y tenerlas hago el indice.
asi.

**Indexado
m.Inde1 = Sys(3)

SELECT gmonedas
INDEX ON codigo_mon TAG g01 OF (m.Inde1)
SET ORDER TO g01

m.Inde2 = Sys(3)
SELECT cartera
INDEX ON codigo_car TAG codigo OF (m.Inde2)
SET ORDER TO codigo

RETURN

Espero te ayude con eso puedes trabajar como si fuera una base de datos nativa.
Bye suerte

pdta.

espero tu ayuda si puedes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CursorAdapter

Publicado por Jose Luis (1 intervención) el 19/12/2008 20:06:02
eso es devido a que el cursoradapter no tienen un indice creado en fox... aunque la tabla origen creada en sql y cualquier otro manejador si la tenga, yo lo que hago es que creo el cursoradapter, establesco mis campos actualizables y lo dejo con registro en bufer y en el init del formulario la agrego los indices que vaya a ocupar con (INDEX ON) y y despues pongo la tabla completa en buffer segun sea el caso o la necesidad, asi ya te funciona el seek
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar