Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problema con consultas (https://www.clubdelphi.com/foros/showthread.php?t=81612)

naty_prog 29-11-2012 21:09:38

problema con consultas
 
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:;//todas
    else
       begin
          consulta:= consulta + ' select * from pe where pe.id_pe=idpl';
        end
    end;

  case ComboBox_carrera.ItemIndex of
    0:;//todas
    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!!!!^\||/

donpedro 29-11-2012 21:26:42

hola naty_prog

es una gran consulta... la estuve verificando y quiero que pruebes algo

cuando pones order by id_docente........ese campo no estas especificando de que tabla es.......si es de materia.id_docente o docente.id_docente

trata de especificarle la tabla a ese campo....a ver que sucede....suerte

nlsgarcia 29-11-2012 22:31:05

naty_prog,

Estas repitiendo la palabra clave Select:
Código SQL [-]
consulta:='select distinct docente.nombre_apellido...'
consulta:= consulta + ' select * from pe where pe.id_pe=idpl';
consulta:= consulta + ' select * from carrera where carrera.id_carrera=:car';
consulta:= consulta + ' select * from materia where materia.id_docente=:mat';
Nota: Para depurar la consulta prueba ejecutarla por partes, de lo más general a lo más específico, y así podrás depurar el Select con mayor facilidad.

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 10:49:57.

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