Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
Problema al Almacenar Datos

Hola:

De antemano les pido una disculpa por estar preguntando mucho en este foro.. pero solo aqui hay personas capacitadas para ayudarme con mis problemas...

Miren.. tengo el siguiente problema al almacenar datos..

Estoy utilizando 4 IBTABLES en para almacenar datos de los alumnos..

IBTABLE1---->ALumnos (Datos PErsonales de los alumnos)
IBTABLE2---->Alumno_carrera (Almacena el IDalumno y IDcarrera con ForeignKeys)
IBTABLE3---->Alumno_semestre (almacena IDalumno y semestre)
IBTABLE4---->Alumno_doc(almacena ID_alumno y Documentos entregados)

a las ultimas 3 tablas les tengo puesto en su propiedad MASTERSOURCE la tabla "alumnos" y en la propiedad MASTERFIELD la relacion entre los ID de las tablas o sea... ID_alumno(tabla Alumno_carrera)---->ID(tabla Alumnos) .. ME explico!!!!!!

Pero al momento de guardar los datos me marca un error en la tabla de "Alumno_doc" me dice que ay una violacion de FOREIGN KEY

Cita:
Constraint "INTEG_113" on table "ALUMNO_DOC"
A que se debera este famoso error??? si en su propiedad mastersource de la tabla le tengo puesto la tabla padre ALUMNOS... y supuestamente el valor del ID del alumno me lo debe guardar automaticamente en la hijo?? estoy en lo correcto o estoy mal????? que alguien me lo diga para saber que puedo hacer..

Ahh y por cierto los valores de la TABLA ALUMNO_DOC almacena valores booleanos pero si ustedes saben INTERBASE no maneja este tipo de datos por lo que cree mi dominio y almacenara '1' si el valor es VERDADERo y '0' si el valor es FALSO.. y estos valores los almacenara por medio de DBCHeckbox... no sera este otro problema por el cual me marca error al momento de almacenar los datos?????

Espero su respuesta lo + pronto posible...

SAlu2
Responder Con Cita
  #2  
Antiguo 21-06-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Prueba creando un evento OnNewRecord para IBTable4 y en el código pon algo como:

Código Delphi [-]
IBTable4.FieldByName('ID_Alumno').Value := IBTable1.FieldByName('ID_Alumno').Value;

Así cada vez que hagas un Insert, el campo ID_Alumno de IBTable4, tomará el valor del alumno seleccionado actualmente en IBTable1.


Otra cosa, para bases de datos Cliente/Servidor, se aconseja hacer uso de componentes TQuery en lugar de TTable. En el caso de las IBX, te recomiendo que uses los TIBDataSet.

Saludos...
Responder Con Cita
  #3  
Antiguo 21-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
ok lo tomare muy en cuenta y grax por el consejo ... si funciona te mandare un mensaje para darte las grax salep???

SALU2 y grax de nuevo..
Responder Con Cita
  #4  
Antiguo 22-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
Disculpa la molestia MAEYANES pero hice lo que me dijiste acerca de crear el evento onNewRecord de mi tabla y lo ejecute y me sigue marcando el mismo error de llave foranea.. ME indica error por que creo que no se almacena la clave del alumno de la tabla alumnos que tengo ligada a la de alumnos_doc...

es mas ya cambie el codigo y a mi evento on newrecord le puse lo siguiente:

Código:
IBTalum_doc.FieldByName('dni_alumno'):= form2.DBEdit1.text
para que tome el valor directamente del DBedit que contiene la clave del alumno cuando la teclean....

Una ultima pregunta cuando ejecuta el procedimiento onNewRecord del IBTalum_doc como lo muestro arriba .. ese codigo ya almacena automaticamente la clave en la mi tabla IBTalum_doc sin necesidad de ejecutar la palabra POST para guardar los datos???
Responder Con Cita
  #5  
Antiguo 22-06-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Cita:
Empezado por (VIH)Lestat
Disculpa la molestia MAEYANES pero hice lo que me dijiste acerca de crear el evento onNewRecord de mi tabla y lo ejecute y me sigue marcando el mismo error de llave foranea.. ME indica error por que creo que no se almacena la clave del alumno de la tabla alumnos que tengo ligada a la de alumnos_doc...

es mas ya cambie el codigo y a mi evento on newrecord le puse lo siguiente:

Código:
IBTalum_doc.FieldByName('dni_alumno'):= form2.DBEdit1.text
para que tome el valor directamente del DBedit que contiene la clave del alumno cuando la teclean....
La clave que usas, es de un registro ya existente en la tabla de alumnos? O es un Alumno nuevo que estás dando de alta?

Si es la segunda opción, tienes que guardar primero el registro del alumno y luego el de IBTalum_doc.

Cita:
Una ultima pregunta cuando ejecuta el procedimiento onNewRecord del IBTalum_doc como lo muestro arriba .. ese codigo ya almacena automaticamente la clave en la mi tabla IBTalum_doc sin necesidad de ejecutar la palabra POST para guardar los datos???
No, siempre es necesario que llames al método Post. Este evento solo sirve para que ejecutes cierto código al momento de crear un nuevo registro. Mayormente se usa para inicializar ciertos campos sin cambiar el estado del registro.


Saludos...
Responder Con Cita
  #6  
Antiguo 22-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
Cita:
Empezado por maeyanes
La clave que usas, es de un registro ya existente en la tabla de alumnos? O es un Alumno nuevo que estás dando de alta?

Si es la segunda opción, tienes que guardar primero el registro del alumno y luego el de IBTalum_doc.




Saludos...
Es un registro Nuevo que estoy dando de alta MARCO.. ENtonces tengo que guardar primero el registro del usuario con todo y su clave, para que despues yo la pueda copiar en mi otra tabla??? oye y que me recomiendas utilizar .. sera que con el evento BEFOREPOST de mi Tabla IBTalum_doc pueda almacenar el registro????... ES que tengo un boton que almacena los datos, o sea ese boton hace la funcion de POST de mi tabla PADRE.. y de todas las Tablas HIJo entonces pensaba en generar ese evento para mi tabla hijo, claro una vez que guarde el registro nuevo......SI ME EXPLICO!!!!

No, siempre es necesario que llames al método Post. Este evento solo sirve para que ejecutes cierto código al momento de crear un nuevo registro. Mayormente se usa para inicializar ciertos campos sin cambiar el estado del registro.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:11:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi