Hola amigos, tengo un problema con una consulta. A grandes rasgos, lo que realiza el bitbtn (botón de vista previa) de mi consulta, es seleccionar de 4 tablas distintas información, las cuales son carreras, planes de estudio, materias y docentes. Pues bien, la tabla docentes se relaciona solamente con la tabla materias (una relación de 1 a N :
1 docente dicta
n cantidad de materias), y a la vez, materias con plan de estudio (N a 1 :
1 plan de estudio tiene
n materias) y por ultimo plan de estudio con carreras (N a 1 :
1 carrera tiene
n cantidad de planes de estudio).
La consulta comienza por seleccionar el área (Cs. Exactas, Cs Económicas, etc) a la cual pertenece esa carrera. En un combobox me aparecen las carreras del area que seleccione, al seleccionar una carrera, me aparecen los planes de estudio en otro combobos, y por ultimo, al seleccionar un plan, me aparecen todas sus materias.
El resultado que debe arrojar el bitbtn de la consulta son los docentes, que a medida que selecciono los combobox de carrera, plan y materia, los va filtrando. He aquí el problema, no logro hacer que funcione.
A continuación les dejo el código del bitbtn para realizar dicha consulta:
Código Delphi
[-]procedure TForm_docente.BitBtn1Click(Sender: TObject);
var
consulta: string;
puse_where: Boolean;
begin
inherited;
consulta:='select distinct docente.nombre_apellido, docente.direccion, docente.tel_fijo, docente.tel_cel, docente.e_mail, '+
' docente.id_localidad, docente.fec_nac, docente.nacionalidad, docente.tip_doc, docente.sexo, docente.edad, docente.id_docente, '+
' docente.estado, docente.n_doc from docente, carrera, pe, materia'+
' where docente.id_docente=materia.id_docente and materia.plan_estudio=pe.id_pe and pe.carrera=carrera.id_carrera order by id_docente';
case ComboBox_plan.ItemIndex of
0:; else
begin
consulta:= consulta + ' select * from pe where pe.id_pe=idpl';
end
end;
case ComboBox_carrera.ItemIndex of
0:; else
begin
consulta:= consulta + ' select * from carrera where carrera.id_carrera=:car';
end
end;
case ComboBox_materia.ItemIndex of
0:;
else
begin
dm.IBDataSet_materia.Locate('nombre',ComboBox_materia.Text,[]);
dm.IBDataSet_profesor.Locate('id_docente',dm.IBDataSet_materiaID_DOCENTE.Value,[]);
consulta:= consulta + ' select * from materia where materia.id_docente=:mat';
end
end;
with(DM.IBQuery_profesor)do
begin
SQL.Clear;
SQL.Add(consulta);
open;
if(ComboBox_materia.ItemIndex<>0)then
begin
ParamByName('mat').AsInteger:=DM.IBDataSet_profesorID_DOCENTE.Value;
end;
if (ComboBox_carrera.ItemIndex<>0) then
begin
if(DM.IBDataSet_carrera.Locate('nombre', ComboBox_carrera.Text, []))then
ParamByName('car').AsInteger:=DM.IBDataSet_carreraID_CARRERA.Value;
end;
if (ComboBox_plan.ItemIndex<>0) then
begin
IF DM.IBDataSet_plan_estudio.Locate('nombre', ComboBox_plan.Text, []) THEN
ParamByName('idpl').AsInteger:=DM.IBDataSet_plan_estudioID_PE.Value;
end;
if (IsEmpty) then
begin
ShowMessage('No se han encontrado resultados')
end
else
begin
Application.CreateForm(TQuickReport_Docentes,QuickReport_Docentes);
QuickReport_Docentes.PreviewModal;
QuickReport_Docentes.Free;
end;
end;
end;
Cuando selecciono algun combobox y quiero consultar, el programa me arroja un mensaje diciendo que algo anda mal con el
"select", he probado con reemplazar los
"select" por
"and" y
"where" pero me larga el mismo error diciendo que estan mal. Espero me puedan ayudar con este problema,ya que estoy en las ultimas instancias de mi tesis para recibirme.
Muchas gracias y saludos a todos!!!!