Como hago un Cursor Actualizable ?

09/11/2004 - 18:56 por ´Ricardo Puello - Colombia | Informe spam
Quien me puede ayudar con ejemplo sencillo de como hacer un cursor
actulizable con la funcion CURSORSETPROP()

Preguntas similare

Leer las respuestas

#1 Carlos Yohn Zubiria
09/11/2004 - 19:18 | Informe spam
¿un cursor?
.- si lo creas por código ya es de por si actualizable
.- si proviene de una instrucción select utiliza el modificador 'readwrite'
.- si proviene de una instrucción select en versiones anteriores, utiliza
las funciones que hay en portalfox para ello
.- puedes comprobar si es actualizable con la función isreadonly
.- si es una vista es de por si actualizable. si te refieres a que actualice
las tablas origen, deberás ajustar varias propiedades de la vista y los
campos: tables, wheretype, sendupdates, updatetype, updatable y keyfield



Saludos,
A.G.P. (Aplicaciones de Gestión y Productividad)
Las Arenas - Vizcaya - España

"´Ricardo Puello - Colombia" <Ricardo Puello -
escribió en el mensaje
news:
Quien me puede ayudar con ejemplo sencillo de como hacer un cursor
actulizable con la funcion CURSORSETPROP()


Respuesta Responder a este mensaje
#2 ´Ricardo Puello - Colombia
09/11/2004 - 19:55 | Informe spam
Carlos me refiero para actualizar las tablas de origen. Un ejemplo de como
ajusto esas propiedades para insertar un nuevo registro o modificar los datos
contenidos en los campos de un registro.

Gracias.
Respuesta Responder a este mensaje
#3 Carlos Yohn Zubiria
11/11/2004 - 08:53 | Informe spam
Para actualizar las tablas origen. Ok. Se trata entonces de una 'vista
actualizable'. Puede ser local o remota, pero el tema que tratamos se
comporta de la misma manera en ambos casos.

Supongamos esta vista parametrizada que nos trae los vencimientos (recibos)
pendientes de un cliente determinado:

create sql view "vencli" as ;
select vencimientos.*, ;
allt(str(vencimientos.numfac)) + "/" + allt(str(vencimientos.añofac)) + "/"
+ allt(str(vencimientos.empresa)) as factura ;
from vencimientos, empresas ;
where empresas.codigo = vencimientos.empresa ;
and !empresas.oculta ;
and vencimientos.cliente = ?m.cliente ; && parámetro que indica con la
variable m.cliente, de cual quieres traer los datos
and vencimientos.estado < 3 ;
order by vencimientos.fecha

Necesitas ajustar las siguientes propiedades:



DBSetProp('VENCLI', 'View', 'WhereType', 1) && indica que hay que utilizar
solo los campos clave para identificar los registros
DBSetProp('VENCLI', 'View', 'SendUpdates', .T.) && indica que se deben
enviar las actualizaciones a las tablas origen
DBSetProp('VENCLI', 'View', 'MaxRecords', -1) && que debe traer todos los
registros
DBSetProp('VENCLI', 'View', 'Tables', 'vencimientos') && la lista de tablas
a actualizar

y por cada campo:

DBSetProp('VENCLI.empresa', 'Field', 'Updatable', .T.) && indica que es
actualizable

y por cada campo clave:

DBSetProp('VENCLI.codigo', 'Field', 'KeyField', .T.)

Posteriormente deberás conocer algo sobre buffer (tableupdate, tablerevert,
etc.) y transacciones...

Saludos,
A.G.P. (Aplicaciones de Gestión y Productividad)
Las Arenas - Vizcaya - España

"´Ricardo Puello - Colombia"
escribió en el mensaje
news:
Carlos me refiero para actualizar las tablas de origen. Un ejemplo de como
ajusto esas propiedades para insertar un nuevo registro o modificar los


datos
contenidos en los campos de un registro.

Gracias.

Respuesta Responder a este mensaje
#4 Ricardo Puello
11/11/2004 - 20:23 | Informe spam
Me doy cuenta que no he sido claro en decir lo que necesito, perdona pero
debe ser por la misma confusion que tengo; pero tu respuesta a es muy
acertada a lo que buscaba, solo que no es con una vista, que para el caso se
comporta igual como tu lo dices.

Fijate lo que estoy haciendo es esto:

nconn = SQLCONNECT('siars','')
SQLEXEC('SELECT * FROM afilia WHERE num_fic = "100"','res_sql')
*** Me conecto a una bd de SQL server a traves de ODBC
*** Hasta aqui todo OK.
*** Ahora quiero insertar o modificar los datos en la tabla origen

Debo hacer esto ?

DBSetProp('res_sql', 'siars', 'WhereType', 1) && indica que hay que utilizar
solo los campos clave para identificar los registros
DBSetProp('res_sql', 'siars', 'SendUpdates', .T.) && indica que se deben
enviar las actualizaciones a las tablas origen
DBSetProp('res_sql', 'siars', 'MaxRecords', -1) && que debe traer todos los
registros
DBSetProp('res_sql', 'siars', 'Tables', 'afilia') && la lista de tablas
a actualizar

y por cada campo:

DBSetProp('res_sql.cod_bar', 'Field', 'Updatable', .T.) && indica que es
actualizable

y por cada campo clave:

DBSetProp('res_sql.num_fic', 'Field', 'KeyField', .T.)

asi es correcto ?

Otra cosa, me hablas del modo buffer, debo colocar el cursor (res_sql) en
modo buffer ?
El hecho que lo este utilizando asi (cursor acceso remoto) no significa que
lo este trabajando como si fuera en modo buffer ?

Muchas Gracias.
Respuesta Responder a este mensaje
#5 Carlos Yohn Zubiria
12/11/2004 - 13:45 | Informe spam
Lo que tu estas utilizando es 'SPT'; no puedes actualizar las tablas origen
desde el cursor creado con la selección. Por supuesto puees hacerlo
emitiendo otra sentencia sql:
SQLEXEC('update afilia set ... ')

¿Por qué no utilizas vistas remotas? Te serviría todo lo dicho anteriormente
y elaa se preocupa del 'como'.
Respecto al buffer, lee la ayuda que está clara. No tiene que ver si los
datos son remotos o no. Se trata de un buffer 'local' en vfp.

Saludos,
A.G.P. (Aplicaciones de Gestión y Productividad)
Las Arenas - Vizcaya - España

"Ricardo Puello" escribió en el
mensaje news:
Me doy cuenta que no he sido claro en decir lo que necesito, perdona pero
debe ser por la misma confusion que tengo; pero tu respuesta a es muy
acertada a lo que buscaba, solo que no es con una vista, que para el caso


se
comporta igual como tu lo dices.

Fijate lo que estoy haciendo es esto:

nconn = SQLCONNECT('siars','')
SQLEXEC('SELECT * FROM afilia WHERE num_fic = "100"','res_sql')
*** Me conecto a una bd de SQL server a traves de ODBC
*** Hasta aqui todo OK.
*** Ahora quiero insertar o modificar los datos en la tabla origen

Debo hacer esto ?

DBSetProp('res_sql', 'siars', 'WhereType', 1) && indica que hay que


utilizar
solo los campos clave para identificar los registros
DBSetProp('res_sql', 'siars', 'SendUpdates', .T.) && indica que se deben
enviar las actualizaciones a las tablas origen
DBSetProp('res_sql', 'siars', 'MaxRecords', -1) && que debe traer todos


los
registros
DBSetProp('res_sql', 'siars', 'Tables', 'afilia') && la lista de tablas
a actualizar

y por cada campo:

DBSetProp('res_sql.cod_bar', 'Field', 'Updatable', .T.) && indica que es
actualizable

y por cada campo clave:

DBSetProp('res_sql.num_fic', 'Field', 'KeyField', .T.)

asi es correcto ?

Otra cosa, me hablas del modo buffer, debo colocar el cursor (res_sql) en
modo buffer ?
El hecho que lo este utilizando asi (cursor acceso remoto) no significa


que
lo este trabajando como si fuera en modo buffer ?

Muchas Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida