Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Modificar tabla (https://www.clubdelphi.com/foros/showthread.php?t=85752)

wilcg 28-04-2014 05:11:22

Modificar tabla
 
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
Código Delphi [-]
  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.

Del modo que mencionas sería:
Código Delphi [-]
  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:
Código Delphi [-]
  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

Código SQL [-]
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.
Cita:

Empezado por wilcg (Mensaje 475785)
...
con respecto a la segunda alternativa quisiera preguntarte,
En el caso de que sean más campos por ejemplo

Código SQL [-]
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:
Código SQL [-]
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 :)


La franja horaria es GMT +2. Ahora son las 21:16:02.

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