Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-09-2006
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
Unhappy Recorrer base de datos registro por registro

Un saludo estimados amigos programadores tengo un problema para actualizar registros, el problema es el siguiente:

tengo una tabla con los siguientes campos:
NumeroVehiculo, FechadeServicio, concepto1, concepto2, importe, importetotal.

lo que quiero es recorrer la tabla para actualizar los datos de manera que tome un registro y el importegasto (siempre y cuando corresponda con el numerovehiculo, y a la vez este registro se almacene en su campo importetotal:
por ejemplo:

NumeroVehiculo FechaServicio Concepto1 Concepto2 Importe ImporteTotal
--------------- ------------- ---------- ---------- ------- -------------
001 01/05/2006 llantas 500.00 500.00
001 16/05/2006 balatas 180.00 680.00
002 04/04/2006 pintura 5000.00 500.00
002 25/05/2006 llantas 500.00 5500.00
001 25/06/2006 afinacion 750.00 1430.00

osea que cuando se introduzca un nuevo registro (y este corresponda al NumeroVehiculo=001 o cualquiera que corresponda con el numero del vehiculo, se vaya autosumando en el campo ImporteTotal. De hecho de esta manera ya me lo hace, el problema es que al actualizar algun dato de un registro ya existente, me da la suma total en el campo importetotal de este registro, y lo que quiero es que la suma total del campo Importe en el ultimo registro que corresponda con el numerovehiculo.

por ejemplo si modifico el registro 2:
001 16/05/2006 balatas 200.00 680.00 en el campo importe (180.00) ahora 200.00 la suma del campo importetotal sera la suma del primero mas el segundo registro, entonces el total el ImporteTotal sera: 700.00 y el ultimo registro contendra el total de todos los registros: 1450.00

NumeroVehiculo FechaServicio Concepto1 Concepto2 Importe ImporteTotal
--------------- ------------- ---------- ---------- ------- -------------
001 01/05/2006 llantas 500.00 500.00
001 16/05/2006 balatas 200.00 700.00
001 25/06/2006 afinacion 750.00 1450.00

lo que pretendo es tomar la tabla y recorrer registro por registro (siempre y cuando el NumeroVehiculo=NumeroVehiculo) e ir tomando la informacion existente del campo Importe y esta se autosume el campo ImporteTotal tal como lo muestro en el ejemplo anterior. pero para hacer debo pulsar un Boton para Actualizar Datos, y de esta manera actualizar la tabla.

Código Delphi [-]
procedure TFrmBitacora.Button2Click(Sender: TObject);
var importe1:double;
    importeT:variant;
begin
importeT:=edit1.Text;
   dm.TbBitacora.First;//nos colocamos en el 1 registro
   while  not dm.TbBitacora.Eof do
      begin
      importe1:= dm.TbBitacora.FieldByName('importe').AsFloat;       importeT := importeT + importe1;
      edit1.Text := (importeT);
  
dm.TbBitacora.Next; //pasar al siguiente registro
 
end;

este el codigo que pretendo ejecutar, solo que me marca error y no se como hacerlo.... le agradecere su atencion... muchas gracias y espero me haya explicado BIEN!!!
Responder Con Cita
  #2  
Antiguo 04-09-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Sin entrar en detalles has inicializado el "edit1" convenientemente.
Código Delphi [-]
 procedure TFrmBitacora.Button2Click(Sender: TObject);
var importe1:double;
    importeT:variant;
begin

Edit1.Text:='0';

importeT:=edit1.Text;
   dm.TbBitacora.First;//nos colocamos en el 1 registro
   while  not dm.TbBitacora.Eof do
      begin
      importe1:= dm.TbBitacora.FieldByName('importe').AsFloat;       importeT := importeT + importe1;
      edit1.Text := (importeT);
  
dm.TbBitacora.Next; //pasar al siguiente registro
 
end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 06-09-2006
Avatar de Goyo
Goyo Goyo is offline
Miembro
 
Registrado: feb 2006
Posts: 89
Poder: 19
Goyo Va por buen camino
ya lo hice como me dijiste que me faltaba solo igualar a cero "0" el Edit1.text, ahora el problemilla que tengo es que ahora la suma me la hace de todos los registros que hay en la tabla, para lo cual te muestro el procedimiento que aplico.. con la logica de hacerlo mientras no sea fin de archivo y NumeroVehiculo=NumeroVehiculo para que lo haga solo con aquellas claves que sean iguales...

Código Delphi [-]
procedure TFrmBitacora.Button2Click(Sender: TObject);
var importe1:variant;
    importeT:variant;
begin
  Edit1.Text:='0';
  Edit2.Text:='0';
  importeT:=edit1.Text;
  importe1:=edit2.text;
  dm.TbBitacora.First;   //nos colocamos en el 1 registro
  while  ((not dm.TbBitacora.Eof) and (dm.TbBitacoraNumeroVehiculo.Text = dm.TbBitacoraNumeroVehiculo.Text)) do
      begin
      importe1:= DM.TbBitacora.FieldByName('importe').AsFloat;
      importeT := importeT + importe1;
      edit1.Text := (importeT);
      edit2.Text := (importe1);
      dm.TbBitacora.Edit;
      dm.TbBitacoraImporteTotal.AsFloat := importeT;
      dm.TbBitacora.Next; // brincamos al siguiente registro
  end;
end;
Responder Con Cita
  #4  
Antiguo 06-09-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Este método con un archivo muy grande sería totalmente ineficiente, lo lógico sería tener un índice por el campo en cuestion.
1.- Activar el índice.
2.- Buscar la primera ocurrencia
3.- Comenzar un ciclo mientras las siguientes ocurrencias coincidan.

Al estar indexado cuando no coincidan es que no hay más y así solo se recorren los registros que hay que sumar.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Recorrer Campos de Un Registro Jvilomar MS SQL Server 3 22-11-2005 09:06:14
Comparar un registro de un edit con un registro de una tabla en una consulta Damian666 SQL 10 01-10-2005 00:43:20
¿Borrado masimo o registro a registro? CHiCoLiTa SQL 0 21-03-2005 16:14:39
Mismo registro de la base de datos al crear Form gluglu Varios 2 28-09-2004 18:58:25
como saber el identificador del último registro almacenada en una base de datos. soyhugo Varios 2 16-02-2004 16:04:04


La franja horaria es GMT +2. Ahora son las 19:18:20.


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
Copyright 1996-2007 Club Delphi