Error al ingresar registro relacionado con clave secundaria

Consultas, trucos, consejos. Todo sobre Clarion en todas sus versiones
Clarioneros2016z
Novato
Mensajes: 10
Registrado: Dom Sep 25, 2016 5:07 pm
Contactar:

Error al ingresar registro relacionado con clave secundaria

Mensaje por Clarioneros2016z » Dom Oct 02, 2016 2:00 am

Hola a todos.

Estoy usando Clarion 6.3 y Firebird 2.5. Tengo una tabla LIBROS con los siguientes campos:

IDLIBRO <- Pk
TITULO
IDAUTOR <- Fk
IDEDITORIAL <- Fk
ANIO
ISBN

Como puede verse tengo 2 claves secundarias que apuntan a una tabla AUTOR y otra EDITORIAL.
El problema viene a la hora de ingresar un registro desde la tabla LIBROS, en la cual el formulario
de la misma tiene asociado un FieldLookupButton para completar el campo desde la tabla (AUTOR y EDITORIAL).
Cuando completo el formulario obtengo el siguiente error:

Record Insert Error
File: LIBROS
Error: Violation of FOREIGN KEY Constraint "LIB_KIDAUTOR" on table "LIBROS"
Foreign key reference target not exist (23000)

Sin embargo si hago un ingreso de datos desde el IBExpert parece funcionar bien.

que puede ocurrir?

Saludos.


Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Error al ingresar registro relacionado con clave secunda

Mensaje por Mauricio » Mié Oct 05, 2016 9:58 am

Obviamente no estás seteando correctamente el ID del autor. Chequeaste el valor antes del take completed? Está bien asignado?
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

Clarioneros2016z
Novato
Mensajes: 10
Registrado: Dom Sep 25, 2016 5:07 pm
Contactar:

Re: Error al ingresar registro relacionado con clave secunda

Mensaje por Clarioneros2016z » Jue Oct 06, 2016 6:17 pm

Mauricio escribió:Obviamente no estás seteando correctamente el ID del autor. Chequeaste el valor antes del take completed? Está bien asignado?
No se cual puede ser el error, porque si ingreso los datos desde el IBexpert, no hay ningun problema, osea que la relacion entre las tablas pareceria ser correcta, ahora cuando quiero cargar los datos desde clarion aparece ese error, si el campo IDLIBRO, lo seteo como autonumerado, en cuanto llamo al formulario me aparece el error, o sea ni siquiera se abre el formulario, si le quito el autonumerado, se abre el formulario, pero en cuanto termino de completar los datos, aparece el error diciendo que no existen los datos, en la tabla referenciada, cuando en realidad si existen.

Tabla AUTOR
========

IDAUTOR <- Clave Primaria, Autonumerada
AUTOR

Tabla EDITORIAL
===========
IDEDITORIAL <- Clave Primaria, Autonumerada
EDITORIAL


Tabla LIBROS
=========

IDLIBRO <- Clave Primaria, Autonumerada
TITULO
IDAUTOR <- Clave secundaria
IDEDITORIAL <- Clave secundaria
ANIO
ISBN

No se se, si hubiera algun error de diseño, no tendria que saltar tambien desde el ibexpert?

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Error al ingresar registro relacionado con clave secunda

Mensaje por Mauricio » Jue Oct 06, 2016 9:54 pm

Te has fijado qué valor tienes esos campos antes del takecompleted?
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

Clarioneros2016z
Novato
Mensajes: 10
Registrado: Dom Sep 25, 2016 5:07 pm
Contactar:

Re: Error al ingresar registro relacionado con clave secunda

Mensaje por Clarioneros2016z » Vie Oct 07, 2016 1:08 am

Mauricio escribió:Te has fijado qué valor tienes esos campos antes del takecompleted?
Tengo ingresado unos valores de prueba, las tablas AUTOR y EDITORIAL estan previamente cargadas con datos:

Tabla AUTOR
========

IDAUTOR (INTEGER) <- Clave Primaria (not null), Autonumerada
AUTOR (VARCHAR)

Tabla EDITORIAL
===========

IDEDITORIAL (INTEGER) <- Clave Primaria (not null), Autonumerada
EDITORIAL (VARCHAR)

Tabla LIBROS
=========

IDLIBRO (INTEGER) <- Clave Primaria (not null), Autonumerada
TITULO (VARCHAR)
IDAUTOR (INTEGER) <- Clave foranea (not null)
IDEDITORIAL (INTEGER) <- Clave Foranea (not null)
ANIO (SMALLINT)
ISBN (VARCHAR)
tablas.jpg
Como dije anteriormente, si el campo IDLIBRO de la TABLA LIBROS, lo configuro como autonumerado, no puedo ingresar al formulario y me sale el error, si le quito el autonumerado me deja completar el formulario, pero cuando quiero escribir los datos a la tabla, me sale el mismo error. Creo que el error debe estar en clarion, no se si al importar la tabla al diccionario o algo asi, porque ingresando los datos a traves del IBexpert, los ingresa correctamente, no me da ningun error.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Error al ingresar registro relacionado con clave secunda

Mensaje por Mauricio » Vie Oct 07, 2016 4:37 am

Yo no dejo que Clarion autonumere.
En estos casos, habilito el trace y veo qué le está enviando Clarion al motor.
Y antes del TakeCompleted pongo un mensaje que me diga qué valores tienen los campos, para ver si están bien seteados.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

Clarioneros2016z
Novato
Mensajes: 10
Registrado: Dom Sep 25, 2016 5:07 pm
Contactar:

Re: Error al ingresar registro relacionado con clave secunda

Mensaje por Clarioneros2016z » Vie Oct 07, 2016 5:39 pm

Mauricio escribió:Yo no dejo que Clarion autonumere.
En estos casos, habilito el trace y veo qué le está enviando Clarion al motor.
Y antes del TakeCompleted pongo un mensaje que me diga qué valores tienen los campos, para ver si están bien seteados.
Le elimine el autonumerado, intente llenar el formulario, y si pasandole el trace, no le esta enviando
los datos, esto es lo que arroja:

Código: Seleccionar todo

017F0H(2) 17:27:09.845 Binding ? 1 for input with C type SLONG as INTEGER for Statement 0669FA8H Time Taken:0.00 secs
017F0H(2) 17:27:09.849 Binding ? 2 for input with C type CHAR(NTS) as VARCHAR(100) for Statement 0669FA8H Time Taken:0.00 secs
017F0H(2) 17:27:09.853 Binding ? 3 for input with C type SLONG as INTEGER for Statement 0669FA8H Time Taken:0.00 secs
017F0H(2) 17:27:09.856 Binding ? 4 for input with C type SLONG as INTEGER for Statement 0669FA8H Time Taken:0.00 secs
017F0H(2) 17:27:09.859 Binding ? 5 for input with C type SSHORT as SMALLINT for Statement 0669FA8H Time Taken:0.00 secs
017F0H(2) 17:27:09.862 Binding ? 6 for input with C type CHAR(NTS) as VARCHAR(50) for Statement 0669FA8H Time Taken:0.00 secs
017F0H(2) 17:27:09.866 Executing prepared Statement 0669FA8H
017F0H(2) 17:27:09.869 Error Occurred: 23000 [ODBC Firebird Driver][Firebird]violation of FOREIGN KEY constraint "LIB_KIDDAUTOR" on table "LIBROS"<0AH>Foreign key reference target does not exist
017F0H(2) 17:27:09.870  Time Taken:0.02 secs
017F0H(2) 17:27:09.871 ADD(LIBROS:0343970H) violation of FOREIGN KEY constraint "LIB_KIDDAUTOR" on table "LIBROS"
Foreign key reference target does not exist Time Taken:0.03 secs
017F0H(2) 17:27:09.873  LIB:IDLIBRO: 0
017F0H(2) 17:27:09.874  LIB:TITULO  : ''
017F0H(2) 17:27:09.874  LIB:IDAUTOR: 0
017F0H(2) 17:27:09.876  LIB:IDEDITORIAL : 0
017F0H(2) 17:27:09.876  LIB:ANIO    : 0
017F0H(2) 17:27:09.877  LIB:ISBN    : ''
017F0H(2) 17:27:09.878 
Por alguna razon, no le envia los datos correctamente.

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Error al ingresar registro relacionado con clave secunda

Mensaje por Mauricio » Vie Oct 07, 2016 7:09 pm

O lo estás limpiando antes o no lo estás asignando correctamente.
Luego de seleccionarlo, te fijaste que el valor sea el que tiene que ser?
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

Clarioneros2016z
Novato
Mensajes: 10
Registrado: Dom Sep 25, 2016 5:07 pm
Contactar:

Re: Error al ingresar registro relacionado con clave secunda

Mensaje por Clarioneros2016z » Sab Oct 08, 2016 7:19 pm

Mauricio escribió:O lo estás limpiando antes o no lo estás asignando correctamente.
Luego de seleccionarlo, te fijaste que el valor sea el que tiene que ser?
Soy muy nuevo en clarion, hay alguna opcion desde el clarion para configurar las relaciones correctamente,
porque vuelvo a repetir, desde el IBexpert, ingresando datos a las tablas en cuestion no hay ningun problema, pero desde el clarion, no logro hacerlo funcionar, inclusive agregando otra tabla que tenia que utilizar en el programa y en la cual se hace uso de claves foraneas, me da el mismo error, o sea el problema esta cuando quiero cargar datos en tablas relacionadas con claves foraneas desde el clarion, no se si desde el clarion hay alguna forma de configurarlas, o se deben declarar aparte o si por el contrario deberian funcionar sin mas.

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: Error al ingresar registro relacionado con clave secunda

Mensaje por Mauricio » Sab Oct 08, 2016 9:53 pm

En Clarion las claves las definís como Restrict Server y no hacen absolutamente nada. Tiene que ser el motor el que se encargue de todo.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog


Responder

¿Quién está conectado?

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