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

alfred en arsistemes.com alfred en arsistemes.com
Dom Jul 14 23:19:20 CEST 2013


Saludos de nuevo,

Está muy bien. Pero sobre todo, si funciona: perfecto. Siempre digo que si
algo funciona, no lo toques.

Si quieres mejorarla, conocer más sobre SQL, etc...
lo que te decía por aquí un compañero es interesante:

*- Uso de parámetros para SQL.

Más en:
http://wiki.freepascal.org/SqlDBHowto/es#.C2.BFC.C3.B3mo_utilizar_par.C3.A1metros_en_una_consulta.3F

Por otro lado, yo pillé la manía de utilizar Add. Pero de vez en cuando
también utilizo el mismo sistema que vos. Para gustos colores.

SQL.Add(' SELECT * FROM TABBLA ');
SQL.Add(' WHERE codigo=:Unparametro ');
Parameters.ParamByName('Unparametro').Value := [ValorParametro];

No cal decir que .Value puede ser asstring, asinteger, asdate.. etc...


Si vas a trastear con los parámetros, no olvides conservar la aplicación
que funciona con todo su código... que yo me he llevado algún susto
trasteando cosas mejorando algo que ya funcionaba bien.


> 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 electr
> onico que ofrece Infomed para respaldar el cumplimiento de las misiones
> del
> Sistema Nacional de Salud. La persona que envia este correo asume el
> comprom
> iso de usar el servicio a tales fines y cumplir con las regulaciones
> estable
> cidas
>
> Infomed: http://www.sld.cu/
>
>
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>






More information about the Lazarus-es mailing list