[Lazarus-es] como diseñar y ejecutar una consulta en sqlite

Héctor F. Fiandor Rosario hfiandor en infomed.sld.cu
Sab Jul 13 03:07:58 CEST 2013


Estimados colegas:

mejorando una aplicacion con una unit uDM (datamodulo) me encontre con un problema y le di una solucion, pero quisiera conocer si lo que hize esta bien o puede mejorarse.

en la uDM puse los componentes tcProyPorActividades, dscProyectosPorActividades y un TSQLQuery nombrado cProyectosPorActividades.

en otra unit, donde se crean todas las tablas del programa, puse el siguiente codigo:
     fDM.tcProyPorCentros.FileName:=directory1+'\TablasCosto_'+anomes+'.db';
     if not fDM.tcProyPorCentros.TableExists('cProyPorCentros') then
     begin
          fDM.tcProyPorCentros.FieldDefs.Add('ccosto', ftString);
          fDM.tcProyPorCentros.FieldDefs.Add('nombre', ftString);
          fDM.tcProyPorCentros.FieldDefs.Add('cantidad', ftInteger);
          fDM.tcProyPorCentros.FieldDefs.Add('Inventariable', ftBoolean); //
          fDM.tcProyPorCentros.FieldDefs.Add('Terminado', ftBoolean); //
    end;

y en otra unit, donde quiero realizar la consulta, hize esto:
procedure TfProyPorActividad.miHacerConsultaClick(Sender: TObject);
var sqltext1,sqltext2,sqltext3,sqltext4,sqltext5,SQLText:string;
begin

     fDM.tcProyPorActividad.FileName:=directory1+'\TablasCosto_'+anomes+'.db';
     fDM.tcProyPorActividad.SQL:='cProyPorActividad.Delete'; //debe vaciarse la tabla

     fDM.tcProyPorActividad.Active:=false;
     sqltext1:='SELECT Costos_1.ccosto,Costos_1.nombre,Costos_1.cantidad,Costos_1.Inventariable,Costos_1.ProcIniMN,Costos_1.ProcIniCUC,Costos_1.DirectosMN,Costos_1.DirectosCUC,Costos_1.IndirectosMN,Costos_1.IndirectosCUC,Costos_1.Terminado, ';
     sqltext2:='Costos_1.ProdTerminadosMN,Costos_1.ProdTerminadosCUC,Costos_1.ProcFinMN,Costos_1.ProcFinCUC,Costos_1.CostoUnitarioMN,Costos_1.CostoUnitarioCUC ';
     sqltext3:='FROM Costos_1 ';

     case index of //index viene de ListBox1Click
     0: begin     //consultoria y asesoramiento
             sqltext4:='WHERE Costos_1.NoActividad="01" ';
        end;
     1: begin  //formacion
             sqltext4:='WHERE (Costos_1.NoActividad="02") ' ;
        end;
     2: begin   //difusion del conocimiento
             sqltext4:='WHERE (Costos_1.NoActividad="03") ';
        end;
     3: begin   //editorial
             sqltext4:='WHERE (Costos_1.NoActividad="04") ';
        end;
     4: begin   //generacion del conocimiento
             sqltext4:='WHERE (Costos_1.NoActividad="05") ';
        end;
     5: begin   //servicios informaticos
             sqltext4:='WHERE (Costos_1.NoActividad="06") ';
        end;
     6: begin   //revista nueva empresa
             sqltext4:='WHERE (Costos_1.NoActividad="07") ';
        end;
     7: begin   //otros
             sqltext4:='WHERE (Costos_1.NoActividad="09") ';
        end;
     end; //del case

     sqltext5:='ORDER BY Costos_1.ccosto ASC';
     SQLText:=sqltext1+sqltext2+sqltext3+sqltext4+sqltext5;
     fDM.tcProyPorActividad.SQL:=SQLText;

     fDM.tcProyPorActividad.Active:=true;

     mousePos.x:=165; //
     mousePos.y:=-10;
     Mouse.CursorPos := ClientToScreen(mousePos) ;
end;

y parece que trabaja. Lo que me llevo a esto fue que al salir la pantalla para realizar la consulta, aparecen varias "Actividades", selecciono una y al oprimir Hacer consulta y Ver Informe, me salen los Proyectos que estan ligados a dicha Actividad. Ahora puedo cerrar el Report y seleccionar otra Actividad y me sale correctamente los Proyectos de la nueva Actividad seleccionada.

Lo poco que he aprendido ha sido, como decimos por aca, de "corte y clava" y me gustaria saber como hacerlo bien.

saludos,

Ing. Héctor F. Fiandor Rosario
hfiandor en infomed.sld.cu



--

Este mensaje le ha llegado mediante el servicio de correo electronico que ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema Nacional de Salud. La persona que envia este correo asume el compromiso de usar el servicio a tales fines y cumplir con las regulaciones establecidas

Infomed: http://www.sld.cu/



------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20130712/f65f070d/attachment-0002.html>


More information about the Lazarus-es mailing list