Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2013-07

como diseñar y ejecutar una consulta en sqlite

5 messages · 4 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Martin Gomez
to Héctor F. Fiandor Rosario: Estimados colegas: mejorando una aplicacion con una unit uDM (datamodulo) me encontre con…

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>

Show quoted text 103 lines
** 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.freepascal.org/pipermail/lazarus-es/attachments/20130712/19487269/attachment.html>

Reply by email

Héctor F. Fiandor Rosario

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/ ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20130712/d3e51b6b/attachment.html>

Reply by email

Héctor F. Fiandor Rosario

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.freepascal.org/pipermail/lazarus-es/attachments/20130712/f65f070d/attachment-0001.html>

Reply by email

Ulises Díaz
to Héctor F. Fiandor Rosario: Estimados colegas: mejorando una aplicacion con una unit uDM (datamodulo) me encontre con…

Sr H�ctor puede reducir el c�digo, por ejemplo se puede hacer lo siguiente:(No analic� lo que hace el c�digo pero veo que se puede reducir)

var sqltext1,sqltext2,sqltext3,sqltext4,sqltext5,SQLText:string;WHERE: 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 ';
WHERE:= 'WHERE Costos_1.NoActividad="0';sqltext4:=WHERE + inttostr(Listbox1.itemindex)+'"';
      sqltext5:='ORDER BY Costos_1.ccosto ASC';
     SQLText:=sqltext1+sqltext2+sqltext3+sqltext4+sqltext5;
     fDM.tcProyPorActividad.SQL:=SQLText;      fDM.tcProyPorActividad.Active:=true;
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20130713/8f91f628/attachment.html>

Reply by email

alfred en arsistemes.com
to Héctor F. Fiandor Rosario: Estimados colegas: mejorando una aplicacion con una unit uDM (datamodulo) me encontre con…

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.

Show quoted text 115 lines
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

Reply by email