Ir al contenido


Foto

Modificar una Consulta SQL server 2005


  • Por favor identifícate para responder
19 respuestas en este tema

#1 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 24 noviembre 2010 - 09:19

Saludos C amigos,
Cómo hago para que esta consulta:



delphi
  1. procedure TForm19.BitBtn4Click(Sender: TObject);
  2. Var consulta:string;
  3. begin
  4. consulta:='SELECT Reparacion_No, Precio  FROM Reparaciones WHERE Precio LIKE''';
  5. consulta:=consulta +'%';
  6. consulta:=consulta + Edit3.Text;
  7. consulta:=consulta +'%';
  8. consulta:=consulta +'''';
  9. ADOQuery4.SQL.Clear;
  10. ADOQuery4.SQL.Add(consulta);
  11. ADOQuery4.Active:=True;
  12. ADOQuery4.Open;
  13. end;


Me muestre una tercera columna llamada Total, que indique la suma de todos los registros de la columna Precio ??

Lo que hace esta consulta es que muestra todas las Reparaciones existentes en la tabla con el Precio determinado lo cual se indica con un Edit....
  • 0

#2 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 24 noviembre 2010 - 09:26

No le veo la logica pero seria algo asi



delphi
  1. Var consulta:string;
  2. begin
  3. consulta:='SELECT Reparacion_No, Precio, (Select Sum(Precio) from Reparaciones) as Total  FROM Reparaciones WHERE Precio LIKE''';
  4. consulta:=consulta +'%';
  5. consulta:=consulta + Edit3.Text;
  6. consulta:=consulta +'%';
  7. consulta:=consulta +'''';
  8. ADOQuery4.SQL.Clear;
  9. ADOQuery4.SQL.Add(consulta);
  10. ADOQuery4.Active:=True;
  11. ADOQuery4.Open;


  • 0

#3 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 24 noviembre 2010 - 09:40

thanks
  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 24 noviembre 2010 - 09:42

ufff No funciona


ufff, pueden haber tantos problemas que error te da ufff

jeje, y aparte te repito, no le veo la logica a esa columna, si nos comentas que quieres hacer podremos darte sugerencias
  • 0

#5 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 24 noviembre 2010 - 09:53

Ok si funciona, pero... es posible que en el campo Total muestre solo un registro con la suma de toda la columna Precio ??

aqui la foto...

Aquí muestra la suma total del campo Precio cuando hago la consulta para que me muestre solamente las reparaciones con un valor de 500 ... Muestra 1400 porque existe otro registro con un valor de 400...

Archivos adjuntos


  • 0

#6 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 24 noviembre 2010 - 10:10

Esta última parte no la entendí muy bien...
¿porque no haces mejor un campo calculado?


Saludos!
  • 0

#7 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 24 noviembre 2010 - 10:21

No entiendo, quieres que te sume toda la columna o que quieres que te sume???
  • 0

#8 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 24 noviembre 2010 - 01:57

si pones dos querys para que no te confundas puedes hacer algo como esto:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. ZQuery1.SQL.Text:='select reparacion_no,precio from reparaciones where precio like ' +quotedstr('%' + edit1.Text + '%')+'';
  4. ZQuery1.open;
  5. ZQuery2.SQL.Text:='select sum(precio) as total from reparaciones where precio like ' +quotedstr('%' + edit1.Text + '%')+'' ;
  6. ZQuery2.Open;
  7. Label3.Caption:=ZQuery2total.asstring;
  8. end;



debe poner un label donde le pasas la suma de lo que tienes en el campo precio segun tu edit.

otra consulta que podria ser de tu interes es esta:


sql
  1. SELECT PRECIO,SUM(PRECIO) AS TOTAL FROM REPARACIONES
  2. GROUP BY PRECIO


con ella puedes tener una relacion de todos los totales segun el precio de la reparacion.

Otra version de esta ultima consulta seria algo como esto:


sql
  1. SELECT COUNT(precio) AS rep, PRECIO,SUM(PRECIO) AS TOTAL FROM REPARACIONES
  2. GROUP BY PRECIO




prueba con todo esto y me dices que mas necesitas para ver como te ayudamos.



  • 0

#9 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 24 noviembre 2010 - 04:29

Al ejecutar esto:



delphi
  1. procedure TForm19.BitBtn4Click(Sender: TObject);
  2. Var consulta:string;
  3. begin
  4. consulta:='SELECT Reparacion_No, Precio, (Select Sum(Precio) from Reparaciones) as Ingreso_Total FROM Reparaciones WHERE Precio LIKE''';
  5. consulta:=consulta +'%';
  6. consulta:=consulta + Edit3.Text;
  7. consulta:=consulta +'%';
  8. consulta:=consulta +'''';
  9. ADOQuery4.SQL.Clear;
  10. ADOQuery4.SQL.Add(consulta);
  11. ADOQuery4.Active:=True;
  12. ADOQuery4.Open;
  13. end;



Me sale lo de la foto...
Lo que deseo es que muestre solo una vez el valor de la suma de los registros del campo Precio en el campo Ingreso Total.

a ver si me entienden ahora, pues le cambie el nombre al campo ahora se llama Ingreso_Total, pues es el total de todos los valores de los registros del campo Precio, lo cual es un ingreso a la empresa por cada equipo que se repara.......

Archivos adjuntos


  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 24 noviembre 2010 - 04:40

No acabo de comprender, ¿ podrias colocar una foto de todos los registros sin agruparlos ?, no entiendo que es lo que necesitas.

Salud OS
  • 0

#11 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 24 noviembre 2010 - 04:57

Esos que aparecen ahí son todos los registros que tengo en la tabla, pues cuando presiona 'Consultar' se visualizan todos los registros porque no especifico nada en el Edit, eso esta correcto según mi necesidad, pues lo que quiero es que no me salga repetidas veces el mismo total, lo quiero solo una vez.

Creo que ahora se entenderá mejor con esta imagen...

Archivos adjuntos


  • 0

#12 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 24 noviembre 2010 - 05:23

No se porque quieres necesariamente ponerlo en el dbgrid , si lo haces con el ejemplo que te puse primero te saldria algo como esto. Solo tienes que darle forma, Observalo y comentame si te parece correcto:

Imagen Enviada
  • 0

#13 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 24 noviembre 2010 - 05:30

No se porque quieres necesariamente ponerlo en el dbgrid , si lo haces con el ejemplo que te puse primero te saldria algo como esto. Solo tienes que darle forma, Observalo y comentame si te parece correcto:

Imagen Enviada


Entiendo, pero es el espacio de mi form el problema...

Archivos adjuntos


  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 24 noviembre 2010 - 05:58

A ver si esto te sirve:

Agregué un campo calculado al query y usé su evento OnCalcFields para asignar únicamente al primer registro el valor de la suma.



delphi
  1. procedure TForm1.Query1CalcFields(DataSet: TDataSet);
  2. begin
  3.   if Query1.RecNo = 1 then
  4.   begin
  5.     Query1Total_Renta.Value := format('%m',[Query1Total.value]);
  6.   end
  7.   else begin
  8.         Query1Total_Renta.Value := '';
  9.   end;
  10. end;



Pero claro, hay otras formas, seguramente habrá otras alternativas de los demás compañeros (que si saben de esto ;)).

Salud OS

Archivos adjuntos


  • 0

#15 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 24 noviembre 2010 - 05:59

Pero si te vas a economizar una columna, puedes poner un panel al lado y poner dos label dentro de el
y quedaria algo como esto:
Imagen Enviada
  • 0

#16 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 25 noviembre 2010 - 03:41

Pero si te vas a economizar una columna, puedes poner un panel al lado y poner dos label dentro de el
y quedaria algo como esto:
Imagen Enviada


Y cómo le hago para calcular la cantidad de reparaciones según los registros, en el caso de esta imagen sería 2 reparaciones...
  • 0

#17 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 25 noviembre 2010 - 04:23



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. ZQuery1.SQL.Text:='select sum(precio) as totales, reparacion_no,precio from reparaciones where precio like ' +quotedstr('%' + edit1.Text + '%')+'group by precio,reparacion_no';
  4. ZQuery1.open;
  5. ZQuery2.SQL.Text:='select sum(precio) as total, count(precio) as reparaciones from reparaciones where precio like ' +quotedstr('%' + edit1.Text + '%')+'' ;
  6. ZQuery2.Open;
  7. Label3.Caption:='RD$'+ZQuery2total.AsString;
  8. label2.Caption:='total reparaciones= '+ZQuery2REPARACIONES.AsString;
  9. end;



Imagen Enviada

El titulo de la columna reparacion_no lo puedes arreglar en la propiedad title. Cuando das doble click sobre el dbgrid y te aparecen todos los campos, cuando te pongas sobre uno de ellos, ves las propiedades y ahi esta title y le puedes poner como quieras. En este caso lo puse mas pequeño, para que ocupara menos espacio.
  • 0

#18 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 25 noviembre 2010 - 05:11

puedes jugar con la propiedad visible del panel, para que solo aparezca cuando realizas la consulta y que se oculte cuando haces un cambio en el edit. Seria algo como esto:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. ZQuery1.SQL.Text:='select sum(precio) as totales, reparacion_no,precio from reparaciones where precio like ' +quotedstr('%' + edit1.Text + '%')+'group by precio,reparacion_no';
  4. ZQuery1.open;
  5. ZQuery2.SQL.Text:='select sum(precio) as total, count(precio) as reparaciones from reparaciones where precio like ' +quotedstr('%' + edit1.Text + '%')+'' ;
  6. ZQuery2.Open;
  7. Label3.Caption:='RD$'+ZQuery2total.AsString;
  8. label2.Caption:='total reparaciones= '+ZQuery2REPARACIONES.AsString;
  9. Panel1.Visible:=True;
  10. end;
  11.  
  12.  
  13. procedure TForm1.Edit1Change(Sender: TObject);
  14. begin
  15. Panel1.Visible:=False;
  16. end;


  • 0

#19 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 26 noviembre 2010 - 12:07

puedes jugar con la propiedad visible del panel, para que solo aparezca cuando realizas la consulta y que se oculte cuando haces un cambio en el edit. Seria algo como esto:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. ZQuery1.SQL.Text:='select sum(precio) as totales, reparacion_no,precio from reparaciones where precio like ' +quotedstr('%' + edit1.Text + '%')+'group by precio,reparacion_no';
  4. ZQuery1.open;
  5. ZQuery2.SQL.Text:='select sum(precio) as total, count(precio) as reparaciones from reparaciones where precio like ' +quotedstr('%' + edit1.Text + '%')+'' ;
  6. ZQuery2.Open;
  7. Label3.Caption:='RD$'+ZQuery2total.AsString;
  8. label2.Caption:='total reparaciones= '+ZQuery2REPARACIONES.AsString;
  9. Panel1.Visible:=True;
  10. end;
  11.  
  12.  
  13. procedure TForm1.Edit1Change(Sender: TObject);
  14. begin
  15. Panel1.Visible:=False;
  16. end;



No funciona asi, pues no le veo la propiedad .Text a mis ADOQuery
  • 0

#20 lsedr

lsedr

    Advanced Member

  • Miembros
  • PipPipPip
  • 272 mensajes

Escrito 26 noviembre 2010 - 12:35

Analizando el asunto, reucurrí al uso de variables, y aunque es la forma más larga, por los novatos la entendemos más fácil. Me quedó asi:



delphi
  1. procedure TForm19.BitBtn2Click(Sender: TObject);
  2. Var consulta,consulta2,consulta3:string;
  3. begin
  4. //Busca las reparaciones por Tecnico que la hizo
  5. consulta:='SELECT Reparacion_No, Tecnico, Precio FROM Reparaciones WHERE Tecnico LIKE''';
  6. consulta:=consulta +'%';
  7. consulta:=consulta + Edit1.Text;
  8. consulta:=consulta +'%';
  9. consulta:=consulta +'''';
  10. ADOQuery2.SQL.Clear;
  11. ADOQuery2.SQL.Add(consulta);
  12. ADOQuery2.Active:=True;
  13. ADOQuery2.Open;
  14. //Muestra el Ingreso total del tecnico dado
  15. consulta2:='SELECT SUM(Precio) AS TotalReparaciones FROM Reparaciones WHERE Tecnico LIKE''';
  16. consulta2:=consulta2 +'%';
  17. consulta2:=consulta2 + Edit1.Text;
  18. consulta2:=consulta2 +'%';
  19. consulta2:=consulta2 +'''';
  20. ADOQuery5.SQL.Clear;
  21. ADOQuery5.SQL.Add(consulta2);
  22. ADOQuery5.Active:=True;
  23. ADOQuery5.Open;
  24. Label4.Caption:=ADOQuery5.Fields[0].asstring;
  25. //Muestra el total de reparaciones del tecnico dado
  26. consulta3:='SELECT COUNT(Precio) AS IngresoTotal FROM Reparaciones WHERE Tecnico LIKE''';
  27. consulta3:=consulta3 +'%';
  28. consulta3:=consulta3 + Edit1.Text;
  29. consulta3:=consulta3 +'%';
  30. consulta3:=consulta3 +'''';
  31. ADOQuery6.SQL.Clear;
  32. ADOQuery6.SQL.Add(consulta3);
  33. ADOQuery6.Active:=True;
  34. ADOQuery6.Open;
  35. Label3.Caption:=ADOQuery6.Fields[0].asstring;
  36. end;



Creo que hasta ahora ya resolví el problema,
Gracias Mil, compañeros....

  • 0




IP.Board spam blocked by CleanTalk.