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 variios registros con dataset (https://www.clubdelphi.com/foros/showthread.php?t=77561)

pmtzg 08-02-2012 07:56:59

modificar variios registros con dataset
 
hola amigos tengo el siguiente codigo con el cual deseo actualizar
una tabla de una base de datos de firebird, solo actualizare 1 campo llamado tip_doc

dm1 = es una datamodule
FIBDset1 = es una dataset de FIBplus
FIBTran1 = es la transaction FIBplus


Código Delphi [-]
//por aqui declaro la relacion entre dataset base de datos y transaction

dm1.FIBDset1.SQLs.UpdateSQL.Text:='Update pedidos' +
   ' set '+
   ' tip_doc = :tip_doc';
  
//
dm1.FIBDset1.SQLs.SelectSQL.Text:='Select tip_doc from pedidos';
   dm1.FIBDset1.Open;
   dm1.FIBDset1.Active := true;

xtip_doc := 'P';


while not dm1.FIBDset1.Eof do
    begin
       for I := 1 to dm1.FIBDset1.Fields.Count - 1 do
          begin
            dm1.FIBDset1.QUpdate.Params[0].Value := xtip_doc;
         
          end;{end For}
             dm1.FIBDset1.QUpdate.ExecQuery;
          DM1.FIBDset1.Next;
    end;{end while}

    dm1.FIBTran1.Commit;

esto lo habia hecho con un IBtable de IBX y me funciono pero aqui no me funciona no me actualiza el campo
me podrian dar una manita
saludos !!!! gracias por pasar por aca

Caral 09-02-2012 01:18:46

Hola
Para empezar me parece que deberia ser al reves, pero:

Código Delphi [-]
// Veo la Tabla, no se para que ?
dm1.FIBDset1.SQLs.SelectSQL.Text:='Select tip_doc from pedidos';
   dm1.FIBDset1.Open;
   dm1.FIBDset1.Active := true;

//Hago un update mostrando un parametro
dm1.FIBDset1.SQLs.UpdateSQL.Text:='Update pedidos' +
   ' set '+
   ' tip_doc = :tip_doc';

xtip_doc := 'P';   // doy valor al parametro

while not dm1.FIBDset1.Eof do
    begin
       for I := 1 to dm1.FIBDset1.Fields.Count - 1 do
          begin
            dm1.FIBDset1.QUpdate.Params[0].Value := xtip_doc;  //aplico el parametro.
         
          end;{end For}
             dm1.FIBDset1.QUpdate.ExecQuery;
          DM1.FIBDset1.Next;
    end;{end while}

    dm1.FIBTran1.Commit;
Yo no lo haria asi.:p
Saludos

pmtzg 09-02-2012 05:49:02

hice exactamente lo que me suguieres pero no, sigue igual
recorre toda la tabla pero no actualiza }}


que error he cometido que no puedo verlo}}

gracias amigo ...

ecfisa 09-02-2012 07:30:22

Hola pmtzg.

Opino igual que mi amigo, veo innecesario mostrar previamente la tabla. Por otro lado no entiendo por que recorrer la tabla para ir aplicando el valor del parámetro ¿ Que sentido tiene utilizar la sentencia SQL entonces ? en ese caso bastaría con hacer:
Código Delphi [-]
  while not dm1.FIBDset1.Eof do
  begin
    dm1.FIBDset1.Edit;
    dm1.FIBDset1.FieldByName('tip_doc').AsString:= 'P'; // supongo que tiene la función FieldByName
    dm1.FIBDset1.Next;
  end;
Pero debo reconocer que no conozco los componentes FIBplus y tal vez difieran radicalmente de los que utilizo.

Por si te puediera orientar, usando un TIBDataSet yo haría:
Código Delphi [-]
...
  with IBDataSet1 do
  begin
    Close;
    SelectSQL.Text:= 'UPDATE PEDIDOS SET TIP_DOC = :TDOC';
    ParamByName('TDOC').AsString:= 'P';
    Open;
  end;
...

Saludos.

Casimiro Notevi 09-02-2012 10:01:36

Cita:

Empezado por ecfisa (Mensaje 424613)

Por si te puediera orientar, usando un TIBDataSet yo haría:
Código Delphi [-]
with IBDataSet1 do   
begin     
  Close;     
  SelectSQL.Text:= 'UPDATE PEDIDOS SET TIP_DOC = :TDOC';     
  ParamByName('TDOC').AsString:= 'P';     
  Open;   
end;

Saludos.


Los FIBplus son similares a los IBX.

pmtzg 11-02-2012 05:06:52

gracias
 
gracias muchachos a ustedes y como siempre tan incondicionales
y por supuesto, siempre todos muy atinados en sus comentarios

esto me pasa a mi por ser aficionado y no un buen programador como ustedes

solo no entendi una cosa y me gustaria que me volvieran a iluminar
el comentario de:

Opino igual que mi amigo, veo innecesario mostrar previamente la tabla

no la capto o es alguna instruccion que yo meti y no se que sirve para esto ???

ojala que de paso me puedan recomendar algun manual o en su defecto como interpretar la
ayuda que brinda Delphi ,,,

para poder asi progresar en lo que me gusta pero me falta mucho por aprender
y entender

desde aqui un gran saludo y mi agradecimiento a todos ustedes los que me brindaron sus comentarios

pmtzg 11-02-2012 10:18:25

pregunta
 
me funciiono de maravilla muchahos como ya habia comentado

solo una pregunta

si esta misma tabla deseo hacer un cambio por ejemplo:

hay un campo llamado clave_inven

digamos que son las siguientes claves :

001
001-1
020
020-1
060
060-1
090
090-1
1000
1000-1
900000
900000-1

etc ....




los guiones que tienen estas claves representan un obsequio
pero si deseo contabilizar el total mi idea es quitarle los guiones para sumarlos todos

en pocas palabras trabajere siempre con un respaldo y deseo quitar guiones de la tabla

aqui se necesito hacer un recorrido de la tabla de principio a fin y checando que claves
tienen guion para removerselo

si se puede hacer esto con el dataset???

gracias por sus comentarios una vez mas

Casimiro Notevi 11-02-2012 12:05:02

Recuerda nuestra guía de estilo, preguntas distintas en hilos distintos. Si mezclamos las cosas luego es imposible encontrar nada.


La franja horaria es GMT +2. Ahora son las 02:37:20.

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