Integridad referencial atraves de Alias, no funciona!
- danielnelsonrivarola
- Novato
- Mensajes: 18
- Registrado: Mar Feb 08, 2011 12:11 am
- Contactar:
Integridad referencial atraves de Alias, no funciona!
Estimados, tengo la siguiente tabla remitos (ejemplo)
id vendedor
id comprador
id chofer
id encargado
de todos traigo el id de la tabla de responsables, pero no puedo tener una relación para cada id con el id de responsable y el delete en restrict. La solución que creía conveniente fue generar 4 alias de responsables y establecer relaciones para cada uno con su respectivo alias, pero si elimino alguno de la tabla de responsables, no me controla que referencie a remitos y lo elimina!
¿Existe alguna otra solución?
id vendedor
id comprador
id chofer
id encargado
de todos traigo el id de la tabla de responsables, pero no puedo tener una relación para cada id con el id de responsable y el delete en restrict. La solución que creía conveniente fue generar 4 alias de responsables y establecer relaciones para cada uno con su respectivo alias, pero si elimino alguno de la tabla de responsables, no me controla que referencie a remitos y lo elimina!
¿Existe alguna otra solución?
Desde ya muchas gracias!
Daniel Rivarola
Daniel Rivarola
-
- Al nivel de RZ
- Mensajes: 367
- Registrado: Lun Feb 07, 2011 4:45 pm
- Ubicación: Santo Domingo,Rep.Dominicana
- Contactar:
Re: Integridad referencial atraves de Alias, no funciona!
Hola mi hermano
Por lo que entendí, creo que usted lo quiere es hacer un borrado de registros
de estas tablas que menciona, si es asi, dale un vitazo a este codigo
no tiene que hacer relaciones sino hacer referencia al codigo del registro que quiere borrar
seria asi:
Borrado de Registros de una Tabla
CLEAR(Rece:RECORD)
Rece:NroRecepcion = FAC:NumeroFactura
Access:Recepcion.Fetch(Rece:RecepcionKey)
IF NOT ERROR()
Access:Recepcion.DeleteRecord()!Confirma el borrado
END
!Borrar DetalleRecepcion
CLEAR(DERE:Record)
DERE:NroRecepcion = Rece:NroRecepcion
set(DERE:DetalleRecepcionKey,DERE:DetalleRecepcionKey)
loop until Access:DetalleRecepcion.Next() And DERE:NroRecepcion = Rece:NroRecepcion
IF NOT ERROR()
Access:DetalleRecepcion.DeleteRecord(0)! No Confirma el borrado
END
End
Espero que te sirva
Por lo que entendí, creo que usted lo quiere es hacer un borrado de registros
de estas tablas que menciona, si es asi, dale un vitazo a este codigo
no tiene que hacer relaciones sino hacer referencia al codigo del registro que quiere borrar
seria asi:
Borrado de Registros de una Tabla
CLEAR(Rece:RECORD)
Rece:NroRecepcion = FAC:NumeroFactura
Access:Recepcion.Fetch(Rece:RecepcionKey)
IF NOT ERROR()
Access:Recepcion.DeleteRecord()!Confirma el borrado
END
!Borrar DetalleRecepcion
CLEAR(DERE:Record)
DERE:NroRecepcion = Rece:NroRecepcion
set(DERE:DetalleRecepcionKey,DERE:DetalleRecepcionKey)
loop until Access:DetalleRecepcion.Next() And DERE:NroRecepcion = Rece:NroRecepcion
IF NOT ERROR()
Access:DetalleRecepcion.DeleteRecord(0)! No Confirma el borrado
END
End
Espero que te sirva
Ing. R. Pacheco
Analista Programador
Pachecoramon@hotmail.com, Skype:pachecoramon
Santo Domingo, Rep. Dominicana
Para cualquier consulta rápida: hacerla por WhatApp al 1 347-6159 US
Analista Programador
Pachecoramon@hotmail.com, Skype:pachecoramon
Santo Domingo, Rep. Dominicana
Para cualquier consulta rápida: hacerla por WhatApp al 1 347-6159 US
- danielnelsonrivarola
- Novato
- Mensajes: 18
- Registrado: Mar Feb 08, 2011 12:11 am
- Contactar:
Re: Integridad referencial atraves de Alias, no funciona!
Rubén, gracias por responder.
No es como lo interpretaste.Lo que no está funcionado es que Clarion me controle la integridad referencial NO permitiendo el borrado de la tabla de Responsables, ya que esta referenciado a la tabla Remitos a través de su alias.
No es como lo interpretaste.Lo que no está funcionado es que Clarion me controle la integridad referencial NO permitiendo el borrado de la tabla de Responsables, ya que esta referenciado a la tabla Remitos a través de su alias.
Desde ya muchas gracias!
Daniel Rivarola
Daniel Rivarola
- Mauricio
- Desarrollador de Clarion
- Mensajes: 1125
- Registrado: Dom Feb 06, 2011 9:34 am
- Ubicación: España
- Contactar:
Re: Integridad referencial atraves de Alias, no funciona!
Creo que tendrías que hacer una tabla RemitosResponsables, para establecer una relación m a m. Por código, en todo caso, controlás qué es lo que estás ingresando en esa tabla, ya sean el vendedor, comprador, chofer o encargado.
Ahí creo que podrías controlar en forma más eficiente la relación ya que si borrás cualquier registro de la tabla Responsables que tenga un registro en RemitosResponsables, entonces te va a saltar el mensaje de integridad.
Por otro lado, este diseño sería más eficiente ya que si el día de mañana tenés que agregar otro tipo de responsable no necesitás cambiar la estructura de la tabla.
Ahí creo que podrías controlar en forma más eficiente la relación ya que si borrás cualquier registro de la tabla Responsables que tenga un registro en RemitosResponsables, entonces te va a saltar el mensaje de integridad.
Por otro lado, este diseño sería más eficiente ya que si el día de mañana tenés que agregar otro tipo de responsable no necesitás cambiar la estructura de la tabla.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog
www.tdcsoftware.com y www.clarioneros.com/blog
- DanielRuzo
- Al nivel de RZ
- Mensajes: 124
- Registrado: Dom Feb 06, 2011 7:45 pm
- Ubicación: Uruguay
- Contactar:
Re: Integridad referencial atraves de Alias, no funciona!
Hola, Daniel.
Tenés que dar vuelta los ALIAS y te va a funcionar perfecto. O sea, en lugar de definir ALIAS de RESPONSABLES definí ALIAS de REMITOS. El tema es que como vos lo tenés definido, al eliminar de RESPONSABLES no estás eliminando del ALIAS y por lo tanto las restricciones definidas en el ALIAS no están activas (si el BROWSE fuera sobre el ALIAS sí funcionaría). En cambio, al hacer los ALIAS sobre REMITOS, cuando elimines de RESPONSABLES las restricciones sí estarán activas y controlará contra el ALIAS de REMITOS, que es como controlar contra REMITOS mismo.
Tablas:
RESPONSABLES
REMITOS
REMITOS_VENDEDDOR (ALIAS DE REMITOS)
REMITOS_COMPRADOR (ALIAS DE REMITOS)
REMITOS_CHOFER (ALIAS DE REMITOS)
REMITOS_ENCARGADO (ALIAS DE REMITOS)
Relaciones:
RESPONSABLES<->>REMITOS_VENDEDOR
RESPONSABLES<->>REMITOS_COMPRADOR
RESPONSABLES<->>REMITOS_CHOFER
RESPONSABLES<->>REMITOS_ENCARGADO
El tema acá es que cuando navegues por REMITOS vas a tener que ir a buscar RESPONSABLES a mano para cada una de las columnas involucradas. Para solucionar eso tendrías que agregar además los ALIAS como vos los tenías sobre RESPONSABLES. Por eso me gusta lo de definir relaciones en una tabla intermedia de REMITOS_RESPONSABLES como dice Mauricio, pero tu diseño no tiene nada de malo si lo usás como yo te digo.
Tenés que dar vuelta los ALIAS y te va a funcionar perfecto. O sea, en lugar de definir ALIAS de RESPONSABLES definí ALIAS de REMITOS. El tema es que como vos lo tenés definido, al eliminar de RESPONSABLES no estás eliminando del ALIAS y por lo tanto las restricciones definidas en el ALIAS no están activas (si el BROWSE fuera sobre el ALIAS sí funcionaría). En cambio, al hacer los ALIAS sobre REMITOS, cuando elimines de RESPONSABLES las restricciones sí estarán activas y controlará contra el ALIAS de REMITOS, que es como controlar contra REMITOS mismo.
Tablas:
RESPONSABLES
REMITOS
REMITOS_VENDEDDOR (ALIAS DE REMITOS)
REMITOS_COMPRADOR (ALIAS DE REMITOS)
REMITOS_CHOFER (ALIAS DE REMITOS)
REMITOS_ENCARGADO (ALIAS DE REMITOS)
Relaciones:
RESPONSABLES<->>REMITOS_VENDEDOR
RESPONSABLES<->>REMITOS_COMPRADOR
RESPONSABLES<->>REMITOS_CHOFER
RESPONSABLES<->>REMITOS_ENCARGADO
El tema acá es que cuando navegues por REMITOS vas a tener que ir a buscar RESPONSABLES a mano para cada una de las columnas involucradas. Para solucionar eso tendrías que agregar además los ALIAS como vos los tenías sobre RESPONSABLES. Por eso me gusta lo de definir relaciones en una tabla intermedia de REMITOS_RESPONSABLES como dice Mauricio, pero tu diseño no tiene nada de malo si lo usás como yo te digo.
¡Saludos!
Daniel Ruzo
www.amazingGUI.com
Yo creo en la reencarnación:
antes tenía una vida y ahora soy programador
Daniel Ruzo
www.amazingGUI.com
Yo creo en la reencarnación:
antes tenía una vida y ahora soy programador
- danielnelsonrivarola
- Novato
- Mensajes: 18
- Registrado: Mar Feb 08, 2011 12:11 am
- Contactar:
Re: Integridad referencial atraves de Alias, no funciona!
Mauricio y Daniel, muchas gracias por responder, pruebo y publico los comentarios.
Desde ya muchas gracias!
Daniel Rivarola
Daniel Rivarola
- danielnelsonrivarola
- Novato
- Mensajes: 18
- Registrado: Mar Feb 08, 2011 12:11 am
- Contactar:
Re: Integridad referencial atraves de Alias, no funciona!
Solucionado!
Daniel, funcionó tu sugerencia. Para redondear, las tablas Alias deben estar del lado del hijo y relacionarlas con el padre.
Daniel, funcionó tu sugerencia. Para redondear, las tablas Alias deben estar del lado del hijo y relacionarlas con el padre.
Desde ya muchas gracias!
Daniel Rivarola
Daniel Rivarola
- DanielRuzo
- Al nivel de RZ
- Mensajes: 124
- Registrado: Dom Feb 06, 2011 7:45 pm
- Ubicación: Uruguay
- Contactar:
Re: Integridad referencial atraves de Alias, no funciona!
La solución ideal, aunque un poco pesada, es tener los ALIAS en las dos puntas y armar todas las relaciones. Del lado del hijo, para que funcione la integridad referencial; del lado del padre, para que puedas armar la tabla extendida (que desde los hijos puedas acceder a los datos de los padres).
¡Saludos!
Daniel Ruzo
www.amazingGUI.com
Yo creo en la reencarnación:
antes tenía una vida y ahora soy programador
Daniel Ruzo
www.amazingGUI.com
Yo creo en la reencarnación:
antes tenía una vida y ahora soy programador
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 17 invitados