[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