Trabajando Con Vistas

03/11/2005 - 17:54 por Con | Informe spam
buenas tengo el siguiente codigo SQL para una vista:

SELECT Estilos.estdes, Partes.parcod, Partes.pardes, Partes.paruni,;
Partes.parcor, Tpacking.tpckfec, Tpacking.tpckord, Tpacking.tpckcaj,;
Tpacking.tpckcan, Tpacking.tpcktal;
FROM hjl!estilos INNER JOIN hjl!partes;
INNER JOIN hjl!tpacking ;
ON Partes.parcod = Tpacking.tpckcod ;
ON Estilos.estcod = Partes.parcod

mi objetivo es poner esa vista en una cuadricula y poder modificar solo
los datos de la tabla "tpacking", al modiicar me refiero tambien a
eliminarlos si es necesario, yo puse esto mas no se si es correcto, a lo
que creo que no, porque me marca error de actualizacion al querer
modificar cualquier campo de "tpacking"

open database hjl
use v_estparpck2

requery("v_estparpck2")

DBSETPROP('v_estparpck2','VIEW','TABLES','tpacking')

dbsetprop('v_estparpck2.tpckfec','field','updatename','tpacking.tpckfec')
dbsetprop('v_estparpck2.tpckord','field','updatename','tpacking.tpckord')
dbsetprop('v_estparpck2.tpckcod','field','updatename','tpacking.tpckord')
dbsetprop('v_estparpck2.tpckcaj','field','updatename','tpacking.tpckcaj')
dbsetprop('v_estparpck2.tpckcan','field','updatename','tpacking.tpckcan')
dbsetprop('v_estparpck2.tpcktal','field','updatename','tpacking.tpcktal')

DBSETPROP('v_estparpck2.tpckcod','FIELD','KEYFIELD',.T.)

dbsetprop('v_estparpck2.tpckfec','field','updatable',.t.)
dbsetprop('v_estparpck2.tpckord','field','updatable',.t.)
dbsetprop('v_estparpck2.tpckcaj','field','updatable',.t.)
dbsetprop('v_estparpck2.tpckcan','field','updatable',.t.)
dbsetprop('v_estparpck2.tpcktal','field','updatable',.t.)

dbsetprop('v_estparpck2','view','sendupdates',.t.)

thisform.grid1.recordsource="v_estparpck2"

thisform.grid1.column1.readonly=.t.
thisform.grid1.column2.readonly=.t.
thisform.grid1.column3.readonly=.t.
thisform.grid1.column4.readonly=.t.
thisform.grid1.column7.readonly=.t.

thisform.refresh

cualquier ayuda, se agradece.


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
 

Leer las respuestas

#1 Marco A. Mendez Bueno
04/11/2005 - 01:09 | Informe spam
Saludos !

Que tal amigo, bien, veo que estas realizando una vista origen de 2
tablas, bien, me pregunto si has definido un campo llave para la tabla que
intentas modificar ?, en caso de que no, seria conveniente que le
designaras por ejemplo un campo autoincrementable a tu tabla que te sirva
como ID por cada registro insertado.

Algo asi como:
create table ;
Tpacking( ID c(10), tpckfec c(10), tpckord c(10), tpckcaj c(10), tpckcan
c(10), tpcktal c(10)

Asumo q todos los campos son de 10 caracteres como atributos para
ejemplificar, bien en tu diseñador de tablas agregarias un campo ID con un
valor por default = SYS(2015) y este lo indexas y lo estableces como llave
primaria (pudieras utilizar el atributo de autoincrementar si trabajas con
version 8 ó 9 y afectar de la misma manera).

Bien ya que tienes definida tu llave en tu tabla, dentro del diseñador de
vistas, agregas la llave, en este caso perteneciente a la tabla que se
actualizara: "Tpacking", posteriormente dentro del mismo diseñador de
vista, localiza en las pestañas "Criterios de actualizacion" y si aun no
ha sido afectada, pulsa "Actualizar todo" y notaras registros palomeados,
deja palomeada la llave y el o los registros que se afectaran si llegas a
hacer cambios en esa vista.

Una ves en tu form, para salvar cambios y trabajando con un buffer=3, para
salvar los cambios en la vista afectando a la tabla origen, insertas este
codigo en algun boton:

select v_estparpck2 //Seleccionas tu vista y salvas los cambios en tabla
origen
=tableupcate(.t.)
... // Aqui tus filtros en caso de que existan
...
requery("v_estparpck2") // Recargas tu vista
thisform.grid.refresh // Actualizas el grid para reflejar los cambios

Bien esto solo afectara los campos, mas para eliminar el registro total de
la tabla, procediendo de esta vista, estara complicado, necesitaras pensar
en una forma distinta, he aqui donde no se si deseas eliminar de la
consulta y afectar la tabla origen, o bien solo afectar la vista ?, en
caso de ser la primera te recomiendo hacer algo así:

Dentro del grid claro el q contiene la vista antes mencionada, al estar
posicionado sobre el elemento a eliminar de la tabla, puedes programar que
al dar 2 clics hagas la pregunta de si desea eliminar, y te realizas este
pekeña sintaxis:

delete from Tpacking where Tpacking.tucampo = this.value
select Tpacking
=tableupdate(.T.)

Es un metodo que puedes adoptar talves hagas algo como un boton y el mismo
codigo, etc.

Hasta pronto espero haberte captado la idea, y de ser asi, espero haberte
dado buena respuesta.

Atte.
MonjE


****************************
M O N J E
Marco Antonio Mendez Bueno
Cd. Valles, San Luis Potosi, México
****************************


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway

Preguntas similares