Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Violación de clave ajena

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Violación de clave ajena Responder citando

Hola a todos!

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 Smile

Gracias por vuestra atención
Volver arriba
Mensaje    Asunto: Responder citando

Hola, soy la chica que puso el mensaje. Estoy algo preocupadilla porque parece que nadie sabe cómo solucionar el problema.. O quizá es que no me he expresado bien, o que no es una pregunta adecuada en este foro, o no sé, mil cosas.
La cuestión es que supongo que alguien habrá puesto alguna vez una clave ajena a null, y si me pudiese indicar como hacerlo para que no me diese uuna excepción, o explicarme por qué ocurre la que comento en el anterior mensaje, de veras que me sería de mucha ayuda, puesto que estoy atascada enn ese punto y no puedo continuar programando...
Volver arriba
Mensaje    Asunto: Responder citando

Mira, es cuestion que digas. con que componentes accedes desde builder.. y si manejas directamente el Interbase..
mi pregunta es utilizas 2 apliaciones..
1.- es Interbase Natural (sin programa y nada)
2.- estas haciendo un programa con componentes Dataset(cuales son)

para que te pueda indicar. puede que el problema esta dentro del BDE, por donde estas haciendo el enlace..

saludos..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Pues utilizo el interbase 6, el que viene con el builder, yo lo instalé todo así sin mas

En la aplicación estoy utlizando un data module, donde tengo un IBDataBase, un IBTransaction asociado a la base de datos y una serie de IBTables, a las que accedo incluyendo el data module en la unidad correspondiente y con ModuloDatos->TablaEquipo por ejemplo.
Para hacer lo que comento de poner el idequipo del jugador a null, sencillamente muestro jugadores en una lista, y al pulsar el botón, a partir de cada uno de sus DNI's, hago un locate en la tabla Jugador y luego ya hago lo que comentaba en el primer mensaje.
Espero que sea esto lo que me preguntabas...
Saludos
Volver arriba
Mensaje    Asunto: Responder citando

NO LE PONGAS NULL..ponle un valor imposible o no usado en tu aplicacion como por ejemplo 99 o -1 o 0

Aun no he entendido por qu etienes que ponerlo a null si es una consulta

SELECT dni,nombre FROM tutabla
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

YA ENTENDI..DISCULPA

Cita:
El hecho es que si quiero quitar a un jugador de un equipo, accedo a la tabla jugadores y hago


Ahi esta el kernel del asunto.. pues como puse en el mensaje anterior..jamas vas a poder ponerle null, debido a la definicion de la tabla, pero el mismo efecto haces si por definicion haces que 0 sea igual a "SIN EQUIPO" (como regla de negocio)

Me explico?
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Ya pero el problema es que no puedo poner el idequipo a 0 puesto que es clave ajena, entonces sólo admite valores que aparezcan en la tabla de equipos. Tampoco es solución crear un equipo con idequipo a 0 puesto que el nombre del equipo, y la categoría son obligatorios en la tabla equipo, y por lo tanto no los puedo dejar vacíos, y si pongo cualquier otra cosa, tendría efectos laterales que no deseo (por ejemplo, en determinados formularios cargo los items de los combobox para escoger partir de una consulta a la tabla...)
Yo ya estoy de los nervios perdida, porque esto es para una asignatura de la universidad (la última que me queda para acabar) y el profesor no tiene ni idea de Builder (es de los de Visual), y no me puede ayudar...
Espero que entre todos podamos ir descubriendo una solución a este problema que me está volviendo loca....
Muchas gracias por vuestra atención.
Volver arriba
Mensaje    Asunto: Responder citando

Invitado por favor podrías poner, toda la definición de las 2 tablas con las respectivas restricciones de integridad.

Gracias.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Hla!
Soy yo de nuevo. Parece que ya he solucionado el problema...
Al final puse ModuloDatos->TablaJugadorIDEQUIPO->Clear() (o sea, borrar el campo) y no me lanza ninguna excepción y parece que funciona...

No sé por qué no se me había ocurrido antes, supongo que será que me ocequé con lo otro y no era capaz de buscar una solución alternativa.
De todas maneras, un millón de gracias por vuestra ayuda. Si me surge algún otro problemilla al respecto, ya sé donde acudir...

Si de todas maneras quereis que os ponga la definción de las tablas, avisadme....

Un saludo
Volver arriba
Mensaje    Asunto: Responder citando

Hla!
Soy yo de nuevo. Parece que ya he solucionado el problema...
Al final puse ModuloDatos->TablaJugadorIDEQUIPO->Clear() (o sea, borrar el campo) y no me lanza ninguna excepción y parece que funciona...

No sé por qué no se me había ocurrido antes, supongo que será que me ocequé con lo otro y no era capaz de buscar una solución alternativa.
De todas maneras, un millón de gracias por vuestra ayuda. Si me surge algún otro problemilla al respecto, ya sé donde acudir...

Si de todas maneras quereis que os ponga la definción de las tablas, avisadme....

Un saludo
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.