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

Martin Gomez mmgomez en gmail.com
Vie Jul 12 19:48:35 CEST 2013


Si funciona es una solución tan buena como cualquier otra :)

Yo soy partidario de armar los query en un const string y usar parámetros
para poner los valores a filtrar, pero es una maña mía... aparte no todos
los componentes manejan los parámetros de la misma manera (sqlitelaz 0.4 no
los maneja para nada, SQLdb los maneja igual para todos los motores,
incluso SQLite, Zeos nunca he utilizado)



2013/7/12 Héctor F. Fiandor Rosario <hfiandor en infomed.sld.cu>

> **
> 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
>
>
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>
>


-- 
Try not to become a man of success but rather to become a man of value. *Albert
Einstein*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20130712/19487269/attachment-0002.html>


More information about the Lazarus-es mailing list