PDA

Ver la Versión Completa : recorrer una tabla para buscar alguna fecha especifica


Rofocale
30-09-2011, 00:46:30
hola a todos una pregunta quiero saber como puedo recorrer una tabla cuyos datos son por ejemplo:


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:

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:

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
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. :)