Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   problemas con un IBDataSet que depende de otro!!! (https://www.clubdelphi.com/foros/showthread.php?t=4146)

Giniromero 03-10-2003 15:08:07

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

Giniromero 06-10-2003 14:19:50

¿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

__cadetill 06-10-2003 14:32:50

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

Giniromero 07-10-2003 09:52:55

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


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

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