Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-08-2011
Avatar de jorosmtz
jorosmtz jorosmtz is offline
Miembro
 
Registrado: dic 2009
Posts: 108
Poder: 15
jorosmtz Va por buen camino
Modificar un registro en Firebird

Buen día, mi pregunta es debido a que puedo hacer una inserción masiva:

Código Delphi [-]
  With DataModule1.IBCQuery1 do
    begin
      try
        Close;
        SQL.Clear;
        SQL.Add('Insert into TBPRODUCTO (FECHA, HORA, CLAVEPRODUCTO, NOMBREPRODUCTO) ');
        SQL.Add('Values (:FechaNueva, :HoraNueva, :ClaveDelProducto, :NombreDelProducto) ');
        ParamByName('FechaNueva').AsDate := Fecha.Date; //es un TDateTimePicker
        ParamByName('HoraNueva').AsString := Hora.Text; //es una edit
        ParamByName('ClaveDelProducto').AsString := EditClaveProducto.Text;
        ParamByName('NombreDelProducto').AsString := EditNombreProducto.Text;
        ExecSQL;
        DataModule1.IBCConnection.Commit;
        MessageDlg('Se agregó nuevo producto con éxito',mtInformation,[mbOK],0);
      except
         DataModule1.IBCConnection.Rollback;
         MessageDlg('Hubo un error al agregar el nuevo producto',mtInformation,[mbOK],0);
      end;
    end;

Ok, ahora mi pregunta es, ¿como puedo hacer para hacer una actualización masiva?

P.D. Estoy incursionando en "Firebird-Sentencias SQL", es por eso que les pregunto. Al hacer búsquedas en la web (incluyendo aquí) lo que veo es como hacer "update" registro por registro, pero me gustaría hacer un "update" masivo, que cuando haga el "ExecSQL" se actualicen todos los datos de un solo jalón, como en el ejemplo que puse, donde hago una inserción masiva.

Gracias de antemano.
__________________
Javier Oros dice: Deus nobiscum, quis contra nos
Responder Con Cita
  #2  
Antiguo 07-08-2011
Avatar de jorosmtz
jorosmtz jorosmtz is offline
Miembro
 
Registrado: dic 2009
Posts: 108
Poder: 15
jorosmtz Va por buen camino
Olvide comentar, estoy usando Firebird 2.5
__________________
Javier Oros dice: Deus nobiscum, quis contra nos
Responder Con Cita
  #3  
Antiguo 07-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jorosmtz Ver Mensaje
que cuando haga el "ExecSQL" se actualicen todos los datos de un solo jalón, como en el ejemplo que puse
Hola Javier.

El equivalente al ejemplo que pusiste pero realizando una modificación, sería:
Código Delphi [-]
  with IBQuery do
  begin
    try
      Close; 
      SQL.Clear;
      SQL.Add('UPDATE TBPRODUCTO SET ');
      SQL.Add('FECHA = :FECHA,');
      SQL.Add('HORA = :HORA,');
      SQL.Add('CLAVEPRODUCTO = :CLAVEPRODUCTO,');
      SQL.Add('NOMBREPRODUCTO = :NOMBREPRODUCTO ');
      SQL.Add('WHERE CLAVEPRODUCTO = :OLD_CLAVEPRODUCTO');
      ParamByName('FECHA').AsDateTime:= Fecha.Date;
      ParamByName('HORA').AsString:= Hora.Text;
      ParamByName('CLAVEPRODUCTO').AsString:= EditClaveProducto.Text;
      ParamByName('NOMBREPRODUCTO').AsDateTime:= EditNombreProducto.Text;
      ParamByName('OLD_CLAVEPRODUCTO').AsString:= EditClaveProducto.Text; 
      ExecSQL;
      ...
  end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 07-08-2011 a las 08:29:55.
Responder Con Cita
  #4  
Antiguo 07-08-2011
Avatar de jorosmtz
jorosmtz jorosmtz is offline
Miembro
 
Registrado: dic 2009
Posts: 108
Poder: 15
jorosmtz Va por buen camino
Muchas gracias ecfisa, funcionó muy bien, aunque ajusté un poquito el código para optimizar líneas:

Código Delphi [-]
   
with DataModulePpal.IBCQueryAgenda do
      begin
        try
//          DataModulePpal.IBCConnection.StartTransaction;
          Close;
          SQL.Clear;
          SQL.Add('Update TBPRODUCTO set FECHA = :FechaNueva, HORA = :HoraNueva, ');
          SQL.Add('CLAVEPRODUCTO = :ClaveDelProducto, NOMBREPRODUCTO = :NombreDelProducto');
          SQL.Add('Where IDPRODUCTO = ' + IntToStr(NumProducto));
          ParamByName('FechaNueva').AsDate := Fecha.Date;
          ParamByName('HoraNueva').AsString := Hora.Text;
          ParamByName('ClaveDelProducto').AsString := EditClaveProducto.Text;
          ParamByName('NombreDelProducto').AsString := EditNombreProducto.Text;
          ExecSQL;
          DataModule1.IBCConnection.Commit;
          MessageDlg('Se modificó el producto con éxito',mtInformation,[mbOK],0);
        except
          DataModule1.IBCConnection.Rollback;
          MessageDlg('Hubo un error al modificar el producto, vuelva a intentarlo',mtError,[mbOK],0);
        end;
      end;

Gracias de nuevo, en verdad muy claro el ejemplo.
__________________
Javier Oros dice: Deus nobiscum, quis contra nos

Última edición por jorosmtz fecha: 07-08-2011 a las 22:18:57.
Responder Con Cita
  #5  
Antiguo 08-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Que bueno que ecfisa ya te halla solucionado tu problema. Solo quiero hacerte una aclaración. Realmente no estás haciendo inserciones o actualizaciones masivas. Cuando se dice hacer una acción masiva, se refiere a por ejemplo insertar o actualizar más de un registro a la vez con una sola consulta SQL. Solo te lo quiero aclarar porque quedé un poco confundido con el título y el código que nos proporcionaste.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 08-08-2011
Avatar de jorosmtz
jorosmtz jorosmtz is offline
Miembro
 
Registrado: dic 2009
Posts: 108
Poder: 15
jorosmtz Va por buen camino
Muchas gracias Chris, ahora entiendo un poco más eso. ¿hay alguna forma de cambiar el título del tema? Si es así, ¿podrían ayudarme a cambiarlo?

Gracias de nuevo por la aclaración.
__________________
Javier Oros dice: Deus nobiscum, quis contra nos
Responder Con Cita
  #7  
Antiguo 08-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jorosmtz Ver Mensaje
¿hay alguna forma de cambiar el título del tema? Si es así, ¿podrían ayudarme a cambiarlo?
Con mucho gusto. Decime que título deseas ponerle y me encargo de modificarlo.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
Modificar Registro agustin173 Varios 18 07-01-2015 22:05:20
Modificar registro de una tabla alcides SQL 7 09-11-2010 21:06:13
error al modificar registro con firebird joanajj Firebird e Interbase 6 09-11-2007 17:15:42
Modificar registro Elite237 OOP 4 03-08-2007 05:27:21
modificar olo un registro Irina SQL 1 26-05-2003 14:41:59


La franja horaria es GMT +2. Ahora son las 00:58:59.


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