PDA

Ver la Versión Completa : Problemas violación clave ajena desde Builder


melanthea
13-06-2004, 14:00:54
Hola a todos!

Es el primer mensaje que pongo en este foro... A ver si alguien sabe por qué me se me lanza una excepción en mi programa. Estoy haciendo una aplicación en la cual en un determinado momento, quiero poner a null un campo en la tabla y ese campo es clave ajena pero no es un campo obligatorio en la tabla que estoy modificando.
Es decir, yo tengo una tabla "Equipo" donde idEquipo es un smallint y es la clave primaria de esa tabla (y por lo tanto, es not null). Luego tengo una tabla jugador, donde idequipo es foreign key, pero no la declaro como obligatoria en esa tabla.
El hecho es que si quiero quitar a un jugador de un equipo, accedo a la tabla jugadores y hago
Código:...
TablaJugador->Edit();
TablaJugador->FieldValues["IDEQUIPO"]=NULL;
TablaJugador->Post();
...

Builder me lanza una excepción cuando hago el Post diciendo que violo la clave ajena de la tabla jugador... Sin embargo, desde Interbase que es la base de datos que estoy utilizando, puedo acceder a los campos de la tabla y borrar el idequipo del jugador sin ningún problema, dejándolo a null tal y como yo quiero.

Estoy ya tirándome de los pelos, porque llevo liada con este problema no sé ya cuanto tiempo y no se me ocurre ninguna manera de solucionarlo. Si me pudieses ayudar estaría enormemente agradecida :)

Gracias por vuestra atención

santana
13-06-2004, 19:24:05
Hola, melanthea.
Recibe la bienvenida a los foros y deja de tirarte de los pelos ;)

Prueba a ver si deja de darte la excepción no utilizando la relación maestro-detalle, anulando las asignaciones de MasterSource y MasterFields en tus objetos Ttable.

Saludos.

melanthea
13-06-2004, 23:22:35
No tengo mis objetos IBTable con MasterSource y Masterfields asignados. Yo sencillamente lo que hice fue meter las tablas en un Data Module, pero nada más, no establecí ninguna relación entre ellas puesto que las creé directamente en Interbase y por lo tanto las relaciones entre ellas las establecí ahí (con claves ajenas).
Muchas gracias por animarme, pero cómo no me voy a tirar de los pelos si llevo intentando solucionar este problema ya ni me acuerdo cuannto tiempo, y es para la última asignatura que me queda para terminar la carrera....
I need help! :(
Un saludo

marcoszorrilla
13-06-2004, 23:33:06
Mira a ver si por un casual te funciona esto otro:


TablaJugador->Edit();
TablaJugadorIDEQUIPO.Clear;
TablaJugador->Post();

Un Saludo.

melanthea
14-06-2004, 17:43:07
Hola!

Muchiiiiiiiiiiiiiiiiiiiiisimas gracias :) . Parece que ya me funciona con lo de Clear (en realidad es TablaJugadorIDEQUIPO->Clear() ). De momento, no me dio ningún tipo de excepción como antes, y mirando en el Interbase, si que me guarda el campo a null.

Si al final apruebo, os debo la mitad de la nota jejeje.

En serio que un montonazo de gracias porque estaba atascada con esa historia y tenía que hacerlo en bastantes sitios de la aplicación...

Bueno, aprovechando vuestra amabilidad, otra preguntilla que creo q es más sencilla (pero como decís en la guía de estlos, en otro hilo la pongo ;) )

Saludos

barman
25-06-2004, 18:42:11
TablaJugador->Edit();
TablaJugador->FieldValues["IDEQUIPO"]=NULL;
TablaJugador->Post();


TablaJugador->Edit();
TablaJugador->FieldByName["IDEQUIPO"] ->Value=NULL;
TablaJugador->Post();