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