PDA

Ver la Versión Completa : Modificar tabla


wilcg
28-04-2014, 05:11:22
hola amigos del foro, estoy buscando ayuda. Quiero modificar todos los registros de una tabla con excepción del primer registro el uno he encontrado este código hace bien su trabajo lo que quiero es implementarlo para que no toque el primer registro y empiece ha modificar a partir del segundo registro
with Query do
begin
SQL.Clear;
SQL.Text := 'select * from Fechas order by IDFechas asc';
Active := True;
First;
While Not Eof Do
begin
Open;
Edit;
FieldByName('Fecha').AsString := DateToStr(now);
FieldByName('hora').AsString := TimeToStr(now);
Post;
Next;
end;
Active := False;
end;

ecfisa
28-04-2014, 06:40:36
Hola wilcg, bienvenido a los foros de Club Delphi :)

Como es costumbre con los que se inician, te invitamos a que leas nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

Del modo que mencionas sería:

with Query do
begin
RequestLive:= True;
SQL.Text := 'SELECT * FROM FECHAS';
Open;
Next; // saltar el primer registro
// modificar el resto
while not Eof do
begin
Edit;
FieldByName('Fecha').AsDate:= Date;
FieldByName('hora').AsTime:= Time;
Next;
end;
Close;
end;



Otra alternativa mas eficiente pero que puede variar dependiendo de la base de datos con que estas trabajando, es usar una sentencia SQL.
No lo mencionas pero pareciera que estas usando un TQuery (BDE) y si tenes declarado un campo auto incremental, llamémosle ID, podrías hacer por ejemplo:

with Query do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE FECHAS SET FECHA = :PFECHA, HORA = :PHORA');
SQL.Add('WHERE ID > (SELECT MIN(ID) FROM FECHAS)');
ParamByName('PFECHA').AsDate:= Date;
ParamByName('PHORA').AsTime:= Time;
ExecSQL
end;

Si tu motor de base de datos es otro, comentanos y vemos como se puede implementar en él.

Saludos :)

wilcg
28-04-2014, 18:35:34
Gracias ecfisa, por contestar le echare un vistaso a la guía. por otro lado la base de datos que uso es Firebird y ZeosLib para conectarme y la tabla si es autoincremental el campo ID es idfechas. con respecto a la segunda alternativa quisiera preguntarte,
En el caso de que sean más campos por ejemplo

CREATE TABLE FECHAS
(
IDFECHAS Integer NOT NULL,
FECHA DATE,
HORA TIME,
CAMPO1 VARCHAR,
CAMPO2 VARCHAR,
CAMPO3 VARCHAR,
CAMPO4 VARCHAR,
...
PRIMARY KEY (IDFECHAS)
);

como haría la sentencia SQL, me interesa mucho por lo que dices que es la manera mas eficiente y también te pregunto por si en algún momento necesite hacer algo parecido, comento que soy nuevo en este campo de la programación pero me gusta no desaprovechar la oportunidad de aprender de los mejores, de los que saben. qP:-)

ecfisa
28-04-2014, 19:04:25
Hola wilcg.

...
con respecto a la segunda alternativa quisiera preguntarte,
En el caso de que sean más campos por ejemplo

CREATE TABLE FECHAS
(
IDFECHAS Integer NOT NULL,
FECHA DATE,
HORA TIME,
CAMPO1 VARCHAR,
CAMPO2 VARCHAR,
CAMPO3 VARCHAR,
CAMPO4 VARCHAR,
...
PRIMARY KEY (IDFECHAS)
);
como haría la sentencia SQL, ...
La sintáxis es simple, sólo tenes que ir agregando las columnas que te interese modificar, ejemplo para la tabla superior:

UPDATE FECHAS SET FECHA = :PFECHA, HORA = :PHORA, CAMPO1 = :CP1, CAMPO2 = :CP2,
CAMPO3 = :CP3, CAMPO4 = :CP4, ...
WHERE ALGUNA_CONDICION /*(Omite esta línea si deseas modificar todos los registros) */


Saludos :)