Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-01-2009
GrupoDatasoft GrupoDatasoft is offline
Miembro
 
Registrado: ago 2008
Ubicación: Bogotá - Colombia
Posts: 13
Poder: 0
GrupoDatasoft Va por buen camino
Talking 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.
Responder Con Cita
  #2  
Antiguo 30-01-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 30-01-2009
MiKloSS MiKloSS is offline
Miembro
 
Registrado: oct 2007
Posts: 27
Poder: 0
MiKloSS Va por buen camino
Yo utilizaria la segunda opcion es mas sencilla y asi lo que necesitas... salu2
Responder Con Cita
  #4  
Antiguo 09-02-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 09-02-2009
GrupoDatasoft GrupoDatasoft is offline
Miembro
 
Registrado: ago 2008
Ubicación: Bogotá - Colombia
Posts: 13
Poder: 0
GrupoDatasoft Va por buen camino
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.
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
tabla dañada? aparecen todos los registros asi: ®?P½/”ÄrÒP Wonni Tablas planas 10 16-06-2006 20:59:48
Obtener TODOS los registros de una tabla Fita SQL 2 06-09-2005 03:06:24
Seleccionar todos los registros de una tabla menos 2 FunBit MySQL 4 13-07-2005 17:06:31
CÓmo Sumar Todos Los Registros De Una Tabla Leogiro SQL 2 09-09-2004 18:39:23
borrar todos los registros de un tabla Giniromero Conexión con bases de datos 4 18-12-2003 11:47:20


La franja horaria es GMT +2. Ahora son las 10:26:28.


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