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 03-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
Unhappy problemas con un IBDataSet que depende de otro!!!

Hola a todos,

Continuo con mi aplicación en Delphi6 interbase 7 y dialecto sql 3.

en mi aplicación tengo un IBDataset, TbAlumnos, del que dependen en mayor o menor grado el resto de los IBDataSet.

Hay concretamente uno, que es el TbAnotaALU que tiene varios registros por cada Alumno.

Necesito que cada vez que se cambie el registro que se esté mostrando del TbAlumnos, también se cambie, en un DBGrid que tengo asociado a TbAnotaAlu, los registros relacionados con dicho alumno, Vamos, que pase a mostrar los del nuevo alumno activo.


Si a TbAnotaALU, en la propiedad DataSource, lo relacionamos con TbAlumnos me muestra todos los registros de la tabla.

Si no lo relaciono con TbAlumnos en la propiedad DataSource, y al abrir, guardar, Cancelar en el TbAlumnos, ejecuto este procedure:


procedure TFrmDModule.TbAnotaALUInicial(DataSet: TDataSet);
var str : String;
begin
TRY
TbAnotaALU.DisableControls;
TbAnotaALU.Close;
TbAnotaALU.SelectSQL.Clear;
TbAnotaALU.SelectSQL.Add(select CODIGO, NUMALU, NIC, TIPO, FECHA, DESCRIPCION from ANOTA);
IF (TbAlumnos.Active = True) and (not TbAlumnosNUMALU.IsNull) THEN BEGIN

TbAnotaALU.SelectSQL.Add('Where NUMALU =' + TbAlumnosNUMALU.AsString);
TbAnotaALU.SelectSQL.Add('Order by NUMALU, FECHA');
END;

try
TbAnotaALU.Open;
except
on E: Exception do begin
//guardamos en variable "str" el mensaje que queremos se muestre
str := 'Error abriendo TbAnotaALU con el mensaje : ' + E.Message;
Application.MessageBox(PChar(str), 'Atención', MB_OK);
end;
end;

FINALLY
TbAnotaALU.EnableControls;
END;


end;



Se situa siempre en el registro 0, por tanto, esté en el alumno que esté, me muestra SÓLO los registros para el alumno 0.

¿Alguna idea de lo que estoy haciendo mal?

¿alguna idea de como conectar estas dos tablas, para que me muestre los registros que necesito?

Muchas gracias

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)

Última edición por Giniromero fecha: 03-10-2003 a las 15:15:15.
Responder Con Cita
  #2  
Antiguo 06-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
¿Puede tener que ver con la asignación que se hace de SQL al IBDataset, en el selectSQL? Quiero decir, que tal vez sea necesario que se restituya después de cada consulta.?

Gracias

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #3  
Antiguo 06-10-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Posteado originalmente por Giniromero
Si a TbAnotaALU, en la propiedad DataSource, lo relacionamos con TbAlumnos me muestra todos los registros de la tabla.
Seguro que estás haciendo bien la relación de las tablas? Recuerda que tiene que ser algo así

Código:
select *
from ANOTA
where NUMALU = :NUMALU
y relacionar el TIBDatset detalle con el TIBDatset maestro mediante la propiedad DataSource del primero
Responder Con Cita
  #4  
Antiguo 07-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
Hola,

Si, ayer a última hora, vi donde estaba el error.

Estaba añadiendo el valor desde fuera del selectSQL, por lo que algunas veces consideraba que no había valor, cuando salía de la ventana "Selección de Alumno", tras hacer una consulta sin registros resultantes.

Esto es, estaba poniendo en código:


TbAnotaALU.SelectSQL.Add('Where NUMALU =' + TbAlumnosNUMALU.AsString);



En vez de poner dentro del SelectSQL, y por defecto:


where NUMALU = :NUMALU

Gracias por la ayuda, Cadetill.

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
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 09:19:25.


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