Integridad referencial atraves de Alias, no funciona!

Consultas, trucos, consejos. Todo sobre Clarion en todas sus versiones
Responder
Avatar de Usuario
danielnelsonrivarola
Novato
Mensajes: 18
Registrado: Mar Feb 08, 2011 12:11 am
Contactar:

Integridad referencial atraves de Alias, no funciona!

Mensaje por danielnelsonrivarola » Jue Abr 28, 2011 10:22 pm

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?
Desde ya muchas gracias!
Daniel Rivarola


R.Pacheco
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!

Mensaje por R.Pacheco » Jue Abr 28, 2011 10:57 pm

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
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

Avatar de Usuario
danielnelsonrivarola
Novato
Mensajes: 18
Registrado: Mar Feb 08, 2011 12:11 am
Contactar:

Re: Integridad referencial atraves de Alias, no funciona!

Mensaje por danielnelsonrivarola » Dom May 01, 2011 7:02 pm

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.
Desde ya muchas gracias!
Daniel Rivarola

Avatar de Usuario
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!

Mensaje por Mauricio » Dom May 01, 2011 9:53 pm

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.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

Avatar de Usuario
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!

Mensaje por DanielRuzo » Mar May 03, 2011 5:05 pm

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.
¡Saludos!

Daniel Ruzo
www.amazingGUI.com

Yo creo en la reencarnación:
antes tenía una vida y ahora soy programador

Avatar de Usuario
danielnelsonrivarola
Novato
Mensajes: 18
Registrado: Mar Feb 08, 2011 12:11 am
Contactar:

Re: Integridad referencial atraves de Alias, no funciona!

Mensaje por danielnelsonrivarola » Mar May 10, 2011 6:31 pm

Mauricio y Daniel, muchas gracias por responder, pruebo y publico los comentarios.
Desde ya muchas gracias!
Daniel Rivarola

Avatar de Usuario
danielnelsonrivarola
Novato
Mensajes: 18
Registrado: Mar Feb 08, 2011 12:11 am
Contactar:

Re: Integridad referencial atraves de Alias, no funciona!

Mensaje por danielnelsonrivarola » Jue May 12, 2011 4:39 pm

Solucionado!
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

Avatar de Usuario
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!

Mensaje por DanielRuzo » Jue May 12, 2011 6:19 pm

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


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados