Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Suma de 100 tablas dbf (https://www.clubdelphi.com/foros/showthread.php?t=39312)

Jucho69 16-01-2007 22:07:47

Suma de 100 tablas dbf
 
Hola...

Despues de percibir el calibre en cuanto a conocimientos de algunos en este Foro, no tengo dudas de que mi problema tiene solución.

Tengo en una carpeta mas de 100 archivos(tablas.dbf) con igual estructura y de diferente nombre solo deseo saber como se pueden sumar los valores de todas las tablas de esta manera y poner el resultado en una tabla vacia o creada previamente.

tabla1 tabla2 tabla total
2 1 2 1 1 1 3 2 3
3 3 3 3 3 1 3 3 4

De cualquier manera gracias. :confused:

marcoszorrilla 16-01-2007 22:23:34

La cosa es fácil, no tienes más que hacer una consulta SQL por tabla e ir acumulando el resultado en una variable.
Código Delphi [-]
var
nParcial: Double;

begin
nParcial:=0;
Query1.Close;
Query1.Sql.Clear
Query1.Sql.Add('Select Sum(Importe) From MiTabla');
Query1.Open;

nParcial:=nParcial + Query1.Fields[0].AsFloat;

//Esta estructura hay que repetirla una vez por cada tabla.

end;
Si las tablas tienen la misma estructrura, es decir el campo a sumar se llama igual, te vale el Sql, solamente hay que cambiar el nombre de la tabla. Estos nombres se pueden guardar en una matriz y recorrerla mediante un bucle que se ejecutaría 100 veces e ir acumulando los valores.

Un Saludo.

Onti 16-01-2007 23:32:11

basado en el codigo de Marcos, prodria utilizar una funcion

Código Delphi [-]
var
  nParcial: Double;
  Function Suma(NomTabla:String):Double;
  Var
     LRes :Double;
  Begin
    // Incializar
      LRes :=0;
   
    // Consulta
      Query1.Close;
      Query1.Sql.Clear
      Query1.Sql.Add('Select Sum(Importe) From '+NomTabla);
      Query1.Open;
      LRes :=Query1.Fields[0].AsFloat;
      Query1.Close;

    // Resultado
       Suma:=LRes;
  End;
begin

  nParcial:=0;
  nParcial:=nParcial +Suma('tabla1'); 
  nParcial:=nParcial +Suma('tabla2'); 
  .
  .

// Si asumimos que el nombre de las tablas solo diere por un nro podríamos hacer algo así:

  For La :=1 to 100
    nParcial:=nParcial +Suma('tabla'+IntToStr(La));


end;

Jucho69 18-01-2007 19:38:10

Hola Marcos y Onti

Ayer no accedí al Foro por eso no pude probar los resultados que me ofrecieron, de todas formas les agradezco que se hayan ocupado en ayudarme, ya que seguramente el tiempo no les alcanza para atender los multiples problemas que presentamos los menos experimentados.

Este es el extenso codigo que elaboré, primero inserté una sección en el Formulario para apareciera en un Combo los archivos.dbf que estan en una carpeta determinada, luego puse dentro de un ciclo un label que toma el nombre de los itenms de Combo y despues la sentencia SQL cullo resultado se graba en qrlabels (no encontré otra forma).

for zz:=0 to can do
Label2.Caption:=ComboBox1.Items[ComboBox1.ItemIndex];
begin
Query4.SQL.Clear; Query4.SQL.Add('Select * From ' + Label2.caption);
Query4.SQL.Add('where ID_IND = "180"'); Query4.Open;
Form4.qrlabel169.Caption:=(Query4.Fields[0].Text); if Form4.qrlabel169.Caption='' then Form4.qrlabel169.Caption:='0';
Form4.qrlabel167.Caption:=(Form4.qrlabel169.Caption);
aa:=Form4.qrlabel22.Caption; ab:=Form4.qrlabel167.Caption; ba:=strtofloat(aa); bb:=strtofloat(ab);
l:=ba+bb; Form4.qrlabel22.Caption:=floattostr(l); Form4.qrlabel168.Caption:=(Form4.qrlabel170.Caption);

end;

Gracias por adelantado.

Onti 18-01-2007 19:54:44

Algunos detalles:

Cuando uses código delphi utiliza las etiquetas que ayudan mucho para visualizar y entender rápidamente un código, también es útil que tengas una instrucción por linea.

No hay necesidad que utilices un Label como "Puente" entre tu ComboBox y el Query, puedes hacerlo directamente de esta forma:

Código Delphi [-]
  Query4.SQL.Clear;
  Query4.SQL.Add('Select * From ' + ComboBox1.Text);
  Query4.SQL.Add('where ID_IND = "180"');
  Query4.Open;

Jucho69 18-01-2007 20:20:35

¿Como se realiza ciclo sin hacer referencia al Label?
 
Hola Onti.

Es cierto que debo observar algunas normas de programación para no pasar trabajo despues al rectificar o al agregar algun segmento del codigo.
te agradezco tu respuesta, solo que ¿como se realiza ciclo sin hacer referencia al Label?

Disculpame si soy demaciado insistente.


La franja horaria es GMT +2. Ahora son las 10:18:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi