Ver Mensaje Individual
  #7  
Antiguo 16-02-2004
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Reputación: 21
StartKill Va por buen camino
Buenas a todos

Es muy interesante ver como las mentes del mundo tratan d solucionar errores, problemas, dudas que otras mentes, y eso que solo contamos con un "lenguaje escrito", sin tonos presisos de nuestro genio y humor.

Fue un "error" muy parecido que tratare de detallar

Tenia una tabla con la siguiente estructura
Tabla distritos
1.- FCOD_DPTO CHAR(03)
2.- FCOD_PROV CHAR(03)
3.- FCOD_DIST CHAR(03)
4.- FDES_DIST CHAR(20)
5.- FID INTEGER ---->campo autoincrementable con el triger before insert

*Los campos 1,2,3 son el campo Primary Key (...)
*El campo 4 el nombre del distrito
*El campo 5 es un campo autoincremetable con un disparador en este caso se dispara antes de insertar...

Bueno, utilice un componete IBQuery y un IBUpdateSQL que debo suponer que la union de estos hacen el mismo trabajo que el IBDataSet

Las propiedades de mantenimiento de esta tabla en el componente IBUpdateSQL estaban llenas de la siguiente forma:

DeleteSQL=delete from DISTRITOS where FID=:OLD_FID

InsertSQL=insert into DISTRITOS (FCOD_DPTO, FCOD_PROV, FCOD_DIST, FDES_DIST)
values (:FCOD_DPTO, :FCOD_PROV, :FCOD_DIST, :FDES_DIST)


ModySQL=update DISTRITOS
set
FCOD_DPTO=:FCOD_DPTO,
FCOD_PROV=:FCOD_PROV,
FCOD_DIST=:FCOD_DIST,
FDES_DIST=:FDES_DIST,
where
FID = :OLD_FID


RefreshSQL=select
FCOD_DPTO,
FCOD_PROV,
FCOD_DIST,
FDES_DIST,
FID
where
FID=:OLD_FID


Ojo: no se modica el campo FID en el servidor es el amo y señor de ese campo

Cuando añadia un registro me sucedia lo mismo que Comentan "En el cliente no veo el valor de campo incremementado, aun despues de hacerle su respectivo POST y CommitRe...", pues Amigo eso es correcto (eso creo), por que?, humm, el valor obtenido para el campo incremental se hizo en el servidor, el servidor se encargo de darle valor al FID sin que se enterara el cliente/insertador.

Si no hacemos ninguna operación el registro estará añadido en dicha tabla, pero si continuamos trabajando con el mismo registro que es lo que supongo que sucede, zasss, no borra, no refresca, no graba correctamente, por que?, facil si te fijas YO le escribí en el Delete/Refresh/ModySQL que el where es FID=:OLD_FID y cuando le lanzo el pedido al servidor para dicha fila no lo hace por no tener el FID en memoria... Pero como modifico el registro?, como obtengo el FID?, humm

Antes de hacer otra operacion es un refresh... a toda la tabla?..., pero solo quiero ese registro/Fila, nop, nop...

Cambié la intruccion del RefresSQL (la parte de where) asi:

RefreshSQL=select
FCOD_DPTO,
FCOD_PROV,
FCOD_DIST,
FDES_DIST,
FID
where

FCOD_DPTO=:FCOD_DPTO
FCOD_PROV=:FCOD_PROV
FCOD_DIST=:FCOD_DIST


Upps!!, el where es mi clave primary me funciono, refrescaba la fila y de esta forma tenia el FID de esta fila y ya podia hacer mi UPDATE Y DELETE sin problemas.

Espero que esta experiencia ayude en algo a todos aquellos que tienen problemas a estos, que son muy parecidos...

Your Friend

StartKill
Lima-Perú
Responder Con Cita