Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Actualizar todos los registros de una tabla (https://www.clubdelphi.com/foros/showthread.php?t=63125)

GrupoDatasoft 30-01-2009 04:53:41

Actualizar todos los registros de una tabla
 
Hola, tengo una tabla llamada ArchCaja con unos registros que tienen un valor x en en el campo "Valor" y quiero que al dar click en un boton, a este valor de este campo se le reste 100, no soy experto, aqui tengo lo que creí que podría funcionar pero no fué así:

ArchCaja.Open;
ArchCaja.IndexName := 'PorFecha';
ArchCaja.CancelRange; ArchCaja.SetRange([desdeFr.date],[hastaFr.date]);
ArchCaja.Edit;
ArchCaja.FieldByName('Valor').AsInteger := ArchCaja.FieldByName('Valor').AsInteger - 100;
ArchCaja.Post;

Al ejecutar este código, solo me cambia el valor del primer registro, pero lo que necesito es cambiar ese valor en todos los registros del rango solicitado de fecha.

Gracias a todos los que me puedan dar una idea.

Neftali [Germán.Estévez] 30-01-2009 09:54:46

Si lo haces registro a registro tendrás que realizar un recorrido por todos los registros de la tabla e ir cambiando de uno en uno. Algo así:

Código Delphi [-]
ArchCaja.Open;
// Recorrido hasta llegar al final.
while not (ArchCaja.EOF) do begin
  ArchCaja.IndexName := 'PorFecha';
  ArchCaja.CancelRange;  ArchCaja.SetRange([desdeFr.date],[hastaFr.date]);
  ArchCaja.Edit;
  ArchCaja.FieldByName('Valor').AsInteger := 
    ArchCaja.FieldByName('Valor').AsInteger - 100;
  ArchCaja.Post; 
  // Siguiente
  ArchCaja.Next;
end;

Otra opción más eficiente es utilizar una consulta SQL; La lanzar y te hará la actualización de todos los registros. Bastante más rápido dependiendo del número de registros.
Crea un Query y asigna a la propiedad SQL:

Código SQL [-]
  Query := 'UPDATE tabla SET Valor = (Valor - 100)';
  Query.Exec;

Depende de los componentes que esté utilizando puede variar la sintaxis, pero es para que te hagas una idea.
Con esta sólo instrucción te cambiará de una pasada el valor para todos los registros de la tabla.

Un saludo.

MiKloSS 30-01-2009 20:09:52

Yo utilizaria la segunda opcion es mas sencilla y asi lo que necesitas... salu2

Neftali [Germán.Estévez] 09-02-2009 09:09:22

Código:

> El mensaje es el siguiente:
>
> Hola, recibi tu respuesta sobre la pregunta que hice acerca
> de actualizar todos los registros de una tabla, pero la
> pimera no me funciono, solo actualiza el primer registro, y
> la segunda opcion que me diste de sql:
>  Query := 'UPDATE tabla SET Valor = (Valor - 100)';
>  Query.Exec;
>
> no actualiza nada, si escribo:
>
>  Query := 'UPDATE tabla SET Valor = (Valor)';
>  Query.Exec;
>
> me actualiza con el nombre del campo en mención.
>
> si escribo:
>
>  Query := 'UPDATE tabla SET Valor = (100)';
>  Query.Exec;
> me actualiza todos los registros a 100
>
> pero tal como me dijiste:
>
>  Query := 'UPDATE tabla SET Valor = (Valor - 100)';
>  Query.Exec;
>
> no me actualiza nada, es como si no reconociera el campo o el
> signo o ambas. Que me recomiendas? que estoy haciendo mal??

Pues yo lo he probado y funciona sin problemas.
He creado una tablita sencilla con 2 campos:

Campo1 Campo2
------------------
1 2000
2 2000
3 4000
4 5000
5 6000
6 3000

Y he ejecutado la sentencia:

Código SQL [-]
UPDATE _borrame_ger_ SET campo2 = (campo2 + 3)

Luego he revisado los valores:

Campo1 Campo2
--------------------
1 2003
2 2003
3 4003
4 5003
5 6003
6 3003

GrupoDatasoft 09-02-2009 15:19:09

Gracias a Todos
 
Hola, gracias a todos lo que me ayudaron, finalmente todas sus respuestas estaban bien , el error estaba en el tipo del campo que yo estaba procesando. Lo tenía como TBCDField y lo dejé como TCurrencyField.


La franja horaria es GMT +2. Ahora son las 13:14:11.

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