Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   recorrer una tabla para buscar alguna fecha especifica (https://www.clubdelphi.com/foros/showthread.php?t=75960)

Rofocale 30-09-2011 00:46:30

recorrer una tabla para buscar alguna fecha especifica
 
hola a todos una pregunta quiero saber como puedo recorrer una tabla cuyos datos son por ejemplo:

Código Delphi [-]
total     fecha         hora
----------------------------
50.0  29-09-2011   05:29:00
24.4  30-09-2011   05:59:00

lo que quiero hacer es que si ingreso otro total con la misma fecha 30-09-2011 este me actualize dicho campo y si ingreso otro total con fecha 01-10-2011 este me inserte un nuevo campo.

lo que quiero es eso insertar totales de cada dia y se vayan guardando cada uno en una fila.. como puedo hacer alguna sugerencia ?

gracias

oscarac 30-09-2011 00:49:08

confunde un poco el titulo
recorrer una tabla?

lo que quieres parec algo mas complejo
mas o menos asi

si la fecha existe entonces edit y sumo los importes
si la fecha no existe entonces insert y sumo importes

tienes algo de codigo?

Rofocale 30-09-2011 01:57:11

si pero mientras voy insertando no tengo que recorrer la tabla para saber si la fecha existe y updatear o si la fecha del dia actual es mayor que las ya almacenadas para poder insertar la nueva fecha ?

no no tengo codigo.. mas bien necesito hacer algo asi y no tengo muchas opciones

ya hice eso de que

si la fecha existe updatear

si la tabala esa vacia o la fecha almacenada es menor que la del sistema (dia actual)
entonces inserto..

pero esto solo me hace la comparacion con la primera fila..


ya probe agregando valores a la base de datos para ver si funcionaba y pues como repito solo compara con la primera fila no con la segunda ni la tercera

por eso puse el titulo de recorrer la tabla viendo cada fila si la fecha es menor que la del dia actual para insertar...

alguna idea ? necesito opciones

gracias

ecfisa 30-09-2011 05:41:28

Hola Rofocale.

Podés hacerte un procedimiento al efecto, por ejemplo:
Código Delphi [-]
procedure InsertaModifica(const Fecha: string; const Value: Double);
begin
  with TIBQuery.Create(nil) do
  try
    Database:= DataModule1.IBDatabase1;
    SQL.Text:= 'SELECT * FROM TABLA WHERE FECHA = :DATE';
    ParamByName('DATE').AsString:= Fecha;
    Open;
    if IsEmpty then   // ¿ la fecha existe ?
    begin             // no, insertar
      Close;
      SQL.Clear;
      SQL.Add('INSERT INTO TABLA (FLOTANTE, FECHA) ');
      SQL.Add('VALUES (:FLOAT,:FECHA)');
    end
    else              // si, modificar
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE TABLA SET ');
      SQL.Add('FLOTANTE = :FLOAT ');
      SQL.Add('WHERE FECHA = :FECHA');
    end;
    ParamByName('FLOAT').AsFloat:= Value;
    ParamByName('FECHA').AsString:= Fecha;
    ExecSQL;
    DataModule1.IBTransaction1.Commit;
  finally
    Free;
  end;
end;

Ejemplo de llamada:
Código Delphi [-]
  InsertaModifica('12/09/2011', 999.99);

Saludos.

Rofocale 30-09-2011 23:46:35

una pregunta iba a abrir otro hilo tambien para esta pregunta pero justo vi en tu funcion usas commit siempre hacia un exesql y close pero el programa no me guarda los cambios en la base de datos hasta que cierre el programa.. esto a que se debe ? tengo que hacer un commit para que se guarde de inmediato sin cerrar el programa?
te agradeceria la respuesta.

gracias

ecfisa 01-10-2011 00:20:20

Hola Rofocale.

Commit almacena definitivamente las modificaciones, inserciones y borrados relacionadas con la transacción actual y termina la transacción actual, teniendo que usar StartTransaction para comenzar nuevamente la transacción.
Si queres aplicar los cambios y retener la transacción, en lugar de Commit, podés usar CommitRetaining.
Las acciones inversas son Rollback y RollbackRetaining respectivamente.

Un saludo.

maeyanes 03-10-2011 20:42:25

Hola...

Solo que ecfisa está suponiendo que se usa Firebird/Interbase como motor de base de datos, lo cual podría no ser cierto.

Rofocale, ¿es Firebird o Interbase el motor de base de datos que estás utilizando? Por que si es así, el ejemplo de ecfisa te debe funcionar sin problemas.



Saludos...

ecfisa 04-10-2011 17:33:48

Cita:

Empezado por maeyanes (Mensaje 414412)
Hola...
Solo que ecfisa está suponiendo que se usa Firebird/Interbase como motor de base de datos, lo cual podría no ser cierto.

Rofocale, ¿es Firebird o Interbase el motor de base de datos que estás utilizando? Por que si es así, el ejemplo de ecfisa te debe funcionar sin problemas.

Saludos...

Hola maeyanes.

En este caso fué una presunción con cierta certeza. Previamente busqué Firebird como palabra clave y Rofocale como usuario :). (si bién es cierto que podría trabajar con más de uno :rolleyes:)

Y para aquellos que miran el dedo cuando se señala la luna, tu comentario, trae un mensaje muy importante: Brinden toda la información posible hacerca del problema.

Cosa esta, que la mayoría olvida o no tiene en cuenta a la hora de plantear las consultas en sus mensajes.


Un saludo. :)


La franja horaria es GMT +2. Ahora son las 11:37:10.

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