[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