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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
ALmacenar Un Campo En 3 tablas diferentes

Antes que nada un salu2 a todos y disculpen por las molestias ocasionadas de mi parte ... pero hasta ahora nadie ha podido resolver mi problema que tengo con DELPHI7 e Interbase 7.1...

Alguien me puede decir como puedo Almacenar el valor de un campo de en 3 tablas distintas???...

Miren este es el problema:: Tengo 4 tablas (IBTalumnos, IBTalumnos_carrera, IBTalumnos_semestre,IBTAlumnos_doc) mi Tabla padre es la tabla IBTalumnos, Y las 3 ultimas son las tablas HIJO,, como todos saben en la propiedad MASTERSOURCE de estas 3 ultimas tablas va el nombre de la tabla PADRE es decir:: IBTalumnos y en su propiedad MASTERKEYS los campos que hacen referencia a mi tabla PADRE es decir:: DNI_alumno(TABLAHIJO)-->DNI(TABLAPADRE) ¿ME EXPLICO????

Entonces tengo un formulario en donde capturare la informacion de los alumnos en las tablas antes mencionadas... Pero el problema es ¿¿como almaceno el DNI del alumno en las diferentes tablas al mismo tiempo???

Se puede hacer esto???? como???? de que manera??? en realidad me urge una respuesta y si alguien sabe como hacerle se los agradeceria mucho....

SALE2
Responder Con Cita
  #2  
Antiguo 22-06-2005
Avatar de geovany
geovany geovany is offline
Miembro
 
Registrado: sep 2004
Ubicación: El Fuerte Sinaloa
Posts: 165
Poder: 20
geovany Va por buen camino
Has un trigger en la tabla que sea el formulario y al momento de guardar que el trigger te lo guarde en las demas tablas...
__________________
El Fracaso tiene mil explicaciones el Éxito no necsita explicación
Responder Con Cita
  #3  
Antiguo 23-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
Oye geovany me puedes dar un ejemplo de como quedaria el TRIGGER por que la verdad no se como se hacen.....

SALU2
Responder Con Cita
  #4  
Antiguo 23-06-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Código SQL [-]
 

SET TERM !! ;
CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEE
 AFTER UPDATE AS
 BEGIN
  IF (OLD.SALARY <> NEW.SALARY) THEN
  INSERT INTO SALARY_HISTORY
  (EMP_NO, CHANGE_DATE, UPDATER_ID, OLD_SALARY, PERCENT_CHANGE)
   VALUES (OLD.EMP_NO, 'now', USER,OLD.SALARY,
   (NEW.SALARY - OLD.SALARY) * 100 / OLD.SALARY);
 END !!

SET TERM ; !!

ejemplos como estos encontraras en las ayudas del interactive sql de interbase o en el siguiente link si quieres saber mas de los trigger en interbase

Interbase

Chao espero te sirva de algo
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #5  
Antiguo 23-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
ok ok entonces realizare mi trigger y si tengo algunos problemas se los hare saber para que puedan ayudarme... ahhh y otra pregunta..

cuando se almacenan los datos en los IBTAbles desde formularios de Delphi tambien se almacenan en mi base de datos??? o sea puedo ver lo qe almacene en mis tablas desde INTERBASE????
Responder Con Cita
  #6  
Antiguo 23-06-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Si haces commit en la transaccion lo puedes ver en Interbase
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #7  
Antiguo 23-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Como yo no sé de triggers quizá haga una pregunta muy tonta. ¿Por qué no se puede simplemente hacer:

0. empezar transacción
1. Insertar al alumno
2. Obtener el dni asignado
3. insertar carrera con el dni obtenido
4. insertar semestre con el dni obtenido
5. insertar doc con el dni obtenido
6. terminar transacción

Sé que son varias consultas sql pero cada una de ellas debe ser muy rápida.

// Saludos
Responder Con Cita
  #8  
Antiguo 24-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
AYUDAAAA!!!!!!

Miren ya quite todos mis DBedits de mi formulario y meti los TEDITs entonces en el edit1 es en donde se encuentra la matricula del alumno y todos mis datos los voy a almacenar de la siguiente manera:

Cita:
IBtable1.fieldbyname('dni').asString:= EDit1.text;
Ibtable2.fieldbyname('dni_alumno').asstring:=Edit1.text;
IBtable3.fieldbyname('dni_alumno').asstring:=edit1.text;
IBtable4.fieldbyname('dni_alumno').asstring:=Edit1.text;
en el boton "guardar" (button1) y lo unico que tengo enlazadoo que supuestamente se guardaria automaticamente son unos DBcombobox que contienen informacion sobre el status del alumno y el estado civil....

Pero me marca error acerca de que el 'FIELD 'DNI_ALUMNO' MUST HAVE A VALUE' ... a que se debe este mensaje?????
sera que no puedo guardar la informacion de un edit en diferentes tablas??? acaso cuando lo guardo en la primera se borra la informacion del EDIT...???

que es lo que pasa??? ayudenme..
Responder Con Cita
  #9  
Antiguo 24-06-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Cita:
Como yo no sé de triggers quizá haga una pregunta muy tonta
lo que pasa es que personalmente es mejor usar triggers dado que tu puedes condicionar que se disparen cuando se presenten ciertas condiciones especificas se podra hacer con codigo sql y delphi pero para mi es mejor usar el trigger
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #10  
Antiguo 24-06-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
[quote=(VIH)Lestat]
Pero me marca error acerca de que el 'FIELD 'DNI_ALUMNO' MUST HAVE A VALUE' ... a que se debe este mensaje?????QUOTE]

evidentemente es que en el campo DNI_ALUMNO no hay dato que guardar posiblemente sea por lo que stu dices no estoy seguro pero si es por eso por que no guardas el dato que tiene en el edit1.text y lo asignas despues de que haces esto

Código Delphi [-]
 
variable := Edit1.Text;
IBtable1.fieldbyname('dni').asString:= EDit1.text;
Edit1.text := variable;

es una solucion muy mediocre pero creo que funciona..

Cita:
acaso cuando lo guardo en la primera se borra la informacion del EDIT...???
No sabria responder, no me acuerdo
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #11  
Antiguo 24-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
Pues me sigue marcando el mismo error BARTO..

mira ya probe con esto...

Código:
var dni_a:string;
 		   begin
 				 cni_a:=edit1.text;
 				 IBtable1.fieldbyname.('dni'):=dni_a;
 				 IBtable2.fieldbyname('dni_alumno):=dni_a;
y tampoco funciona me sigue marcando es mismo error...

Probe tambien con lo que me digiste y sigue marcando error...
Responder Con Cita
  #12  
Antiguo 24-06-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
como creaste la tabla dni_alumno es que hay una cosa que debes saber si tienes dos tablas

alumno materia

y en alumno tienes los atributos (*)nombre, (*)apellido, (*)dni, telefono por decir algo

y en materia tienes los atributos (*)nom_materia, (*)cod_materia, (*)dni_alumno

en donde los que tienen (*) son campos obligatorios y si tu le pides a el edit que inserte el dato desde la tabla alumno sacara error siempre por que llenas el campo dni_alumno y los demas campos no los estas llenando siendo ellos obligatorios

Verifica tu teoria de llenar datos en distintas tablas depronto lo que necesitas no es eso
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #13  
Antiguo 24-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por el_barto
sacara error siempre por que llenas el campo dni_alumno y los demas campos no los estas llenando siendo ellos obligatorios
Pero el error claramente muestra que el campo que da problemas es DNI_ALUMNO. Aun cuando existiera un problema con otros campos requeridos por el momento el caso es que por alguna razón no está tomando el dato del Edit correctamente.

// Saludos
Responder Con Cita
  #14  
Antiguo 24-06-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Cita:
Empezado por (VIH)Lestat
Pues me sigue marcando el mismo error BARTO..

mira ya probe con esto...

Código:
var dni_a:string;
		 begin
				 cni_a:=edit1.text;
				 IBtable1.fieldbyname.('dni'):=dni_a;
				 IBtable2.fieldbyname('dni_alumno):=dni_a;
fijate es esto:

lodeclaras asi
Código Delphi [-]
var dni_a:string;
pero lo usas asi
Código Delphi [-]
cni_a:=edit1.text;

El error en este caso se puede producir por esto no??? lo usas como cni_a y lo declaraste dni_a

Cita:
Pero el error claramente muestra que el campo que da problemas es DNI_ALUMNO. Aun cuando existiera un problema con otros campos requeridos por el momento el caso es que por alguna razón no está tomando el dato del Edit correctamente.
Lo digo por que el error muy seguramente se le va a presentar entonces en el trigger que armo desde un principio debio decir que los demas campos o no son obligatorios o se generaran automaticamente, tu que crees Roman??? puedo estar equivocado
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #15  
Antiguo 24-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por el_barto
tu que crees Roman???
En cuanto a lo de dni_a y cni_a que fue un simple error al transcribir aquí el código, de lo contrario estaría obteniendo un error de "Undeclared identifier".

En cuanto a lo segundo, quizá justamente el trigger le esté metiendo ruido. Tal como lo plantea ahora pareciera no requerir el trigger pero quizá lo sigue teniendo activo y puede ser que no esté bien definido y sea el que esté metiendo valores en blanco.

// Saludos
Responder Con Cita
  #16  
Antiguo 24-06-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 19
el_barto Va por buen camino
Sip por que como muestra nuestro amigo vih lo hace mediante codigo normalito es decir sin hacer uso del trigger, seria bueno mirar como armaste el trigger,
puede que el trigger si tiene un before insert no este guardando el valor de DNI_ALUMNO y por eso se dispara la excepcion
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #17  
Antiguo 24-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
MIren... Por el momento no estoy utilizando triggers, pero ya se como funcionan... no los utilizo por que el valor que quiero insertar automaticamente o por medio del trigger es el DNI del alumno pero los demas campos los debe jalar de los DBEDits que tenia... pero todos mis DBEDITS ya los elimine y decidi almacenar los datos directamente en la tabla o sea por medio de la propiedad FIELDBYNAME.. si me entienden???? entonces declare la variable como me sugirio el BARTO y almaceno la DNI del alumno que esta en el edit en la variable..... luego esa misma variable la utilizo para almacenar los datos en las diferentes tablas y estoy checando la variable y si almacena el valor del EDIT.. pero me marca error al guardar los datos ....por que despues de utilizar el FIELDBYNAME.asstring:=dni_a; tengo puesto IBtalbe1.post para guardar los datos....

pero tengo una duda.... si estoy utilizando la propiedad de la tabla FIELDBYNAME para introducir los datos ... ya no tengo que utilizar el POST para guardar los cambios???? porque he visto otros ejemplos cuando almacenan los datos con dicha propiedad y no los utilizan pero hay otros que si...entonces no se que hacer????
Responder Con Cita
  #18  
Antiguo 24-06-2005
(VIH)Lestat (VIH)Lestat is offline
Miembro
 
Registrado: abr 2005
Posts: 95
Poder: 20
(VIH)Lestat Va por buen camino
Para ser mas especifico aqui les pongo el codigo que utilizo para almacenar informacion en las tablas antes mencionadas... espero puedan encontrar el error que me aqueja....todo este codigo lo tengo puesto para un boton..

Código:
procedure TIngresar_alum.BitBtn3Click(Sender: TObject);
 
 
 var dni_a:string;
 	apellidopa:string;
 	apellidoma:string;
 	nombre:string;
 	sex:string;
 	dir:string;
 	local:string;
 	ciud:string;
 	tele:string;
 	fecha_ing:variant;
 	statu:string;
 	imagen:variant;
 	edoc:string;
 	carrera:string;
 	sem:integer;
 	cert:integer;
 	fot:integer;
 	act:integer;
 	cur:integer;
 
 
 
 begin
 
  dni_a:=matricula.Text;
  apellidopa:=apaterno.Text;
  apellidoma:=amaterno.Text;
  nombre:=nombres.Text;
  sex:=sexo.Text;
  dir:=direccion.Text;
  local:=localidad.Text;
  ciud:=municipio.Text;
  tele:=telefono.Text;
  edoc:=edocivil.Text;
  carrera:=DBLcarrera.KeyValue;
  fecha_ing:=fecha.Text;
  statu:=status.Text;
 
  sem:=strtoint(semestre.Text);
  cert:=strtoint(certificado.ValueChecked);
  act:=strtoint(acta.ValueChecked);
  fot:=strtoint(fotos.ValueChecked);
  cur:=strtoint(curp.ValueChecked);
 
 
 
 //Se ponen en modo Editar las Tablas para empezar a recibir datos
 
 		ModuloSID.IBTalumnos.Edit;
 		ModuloSID.IBTalumno_carrera.Edit;
 		ModuloSID.IBTsemestre.Edit;
 		ModuloSID.IBTalum_doc.Edit;
 
 
 
 
 
 //Se captura la informacion directamente de las cajas de Texto
 
 
 		ModuloSID.IBTalumnos.FieldByName('dni').AsString:=dni_a;
 		ModuloSID.IBTalumnos.FieldByName('apellido_pa').AsString:=apellidopa;
 		ModuloSID.IBTalumnos.FieldByName('apellido_ma').AsString:=apellidoma;
 		ModuloSID.IBTalumnos.FieldByName('nombre').AsString:=Nombre;
 		ModuloSID.IBTalumnos.FieldByName('sexo').AsString:=Sex;
 		ModuloSID.IBTalumnos.FieldByName('direccion').AsString:=Dir;
 		ModuloSID.IBTalumnos.FieldByName('localidad').AsString:=Local;
 		ModuloSID.IBTalumnos.FieldByName('ciudad').AsString:=ciud;
 		ModuloSID.IBTalumnos.FieldByName('telefono').AsString:=Tele;
 		ModuloSID.IBTalumnos.FieldByName('fecha_ingreso').Value:=fecha_ing;
 		ModuloSID.IBTalumnos.FieldByName('edo_civil').AsString:=edoc;
 		MOduloSID.IBTalumnos.FieldByName('status').AsString:=statu;
 		
 		ModuloSID.IBTalumnos.Post;
 
 		ModuloSID.IBTalumno_carrera.FieldByName('dni_alumno').AsString:=dni_a;
 		ModuloSID.IBTalumno_carrera.FieldByName('dni_carrera').AsString:=carrera;
 		ModuloSID.IBTalumno_carrera.Post;
 
 		ModuloSID.IBTsemestre.FieldByName('dni_alumno').AsString:=dni_a;
 		ModuloSID.IBTsemestre.FieldByName('semestre').AsInteger:=sem;
 		ModuloSID.IBTsemestre.Post;
 
 
 		ModuloSID.IBTalum_doc.FieldByName('dni_alumno').AsString:=dni_a;
 		ModuloSID.IBTalum_doc.FieldByName('certificado').AsInteger:=cert;
 		ModuloSID.IBTalum_doc.FieldByName('acta').AsInteger:=act;
 		ModuloSID.IBTalum_doc.FieldByName('fotos').AsInteger:=fot;
 		ModuloSID.IBTalum_doc.FieldByName('curp').AsInteger:=cur;
 		ModuloSID.IBTalum_doc.Post;
como pueden ver estoy utilizando un Modulo de datos llamado "ModuloSID" en donde almaceno todos los componentes no visuales de mi BD... espero que me puedan ayudar...
ahh y otra cosa tengo declarado variables para almacenar la informacion de los EDITS y luego pasarselas a mis tablas ... estas variables "SI" almacenan la informacion porque ya le hice pruebas y si me la retiene.. el problema esta en las clausulas POST SUPONGO!!!!
Responder Con Cita
  #19  
Antiguo 26-06-2005
ercrizeporta ercrizeporta is offline
Miembro
 
Registrado: jun 2005
Posts: 131
Poder: 19
ercrizeporta Va por buen camino
k pasa tio?a ver si ahora puedo ayudarte yo con esta duda que t surge. creo que el error se puede deber a k para abrir la base de datos para recibir datos lo hagas con "edit". si los datos que vas a introducir son nuevos porque no pruebas a guardar los datos usando el comando "insert" para preparar la base de datos para recibirlos. yo pondría el codigo de insertar en cada tabla debajo de su correspondiente "edit", por el hecho de que cuanto menos tiempo este modificando las tablas supongo será mejor, pero ya esto solo es una idea.
espero haya suerte y sirva esto!!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 14:47:32.


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