Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-04-2007
Avatar de jorelivi
jorelivi jorelivi is offline
Miembro
 
Registrado: abr 2007
Posts: 45
Poder: 0
jorelivi Va por buen camino
Actualizar campo de dbgrid

Tengo un Dbgrid con multiselect y solo quiero actualizar solo los que seleccione y me cambia todos los que muestra el DbGrid.

Solicito su ayuda y gracias por las indicaciones para llegar a este foro.

Código Delphi [-]
 Codigo Delphi

  if DbGrid1.SelectedRows.Count>0 then  // por si solo seleccionan uno...
     for I := 0 to DbGrid1.SelectedRows.Count-1 do
     begin
       DbGrid1.DataSource.DataSet.BookMark := DbGrid1.SelectedRows[i];
       // Todo lo que tengas que hacer
       If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
           sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+ias';
           Query1.Close;
           Query1.SQL.Clear;
           Query1.SQL.Add(sQuery);
           Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
           Query1.ExecSQL;
        End;
     end
__________________
La sabiduría de los sabios y la experiencia de los siglos pueden ser conservadas con las citas.
Atte.
Jorelivi

Última edición por jorelivi fecha: 26-04-2007 a las 22:31:01.
Responder Con Cita
  #2  
Antiguo 26-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola jorelivi
Primero lo voy a arreglar un poco para entenderlo mejor, es bueno que te fijes en la guia de estilo del foro.
Código Delphi [-]
if DbGrid1.SelectedRows.Count>0 then // por si solo seleccionan uno...
for I := 0 to DbGrid1.SelectedRows.Count-1 do
begin
DbGrid1.DataSource.DataSet.BookMark := DbGrid1.SelectedRows[i];
// Todo lo que tengas que hacer
If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+ias';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(sQuery);
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
Query1.ExecSQL;
End;
end
Saludos
Responder Con Cita
  #3  
Antiguo 26-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno primero tengo varias dudas:
1: Por que usar una variable sQuery en doden pones la sentencia sql?
2: Dias me suena a date no a integer ?
En tal caso, para empezar lo haria asi:
Código Delphi [-]
if DbGrid1.SelectedRows.Count>0 then // por si solo seleccionan uno...
for I := 0 to DbGrid1.SelectedRows.Count-1 do
begin
DbGrid1.DataSource.DataSet.BookMark := DbGrid1.SelectedRows[i];
// Todo lo que tengas que hacer
If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
Query1.Close;
Query1.SQL.Text:= 'Update cuen01 Set Fecha_venc=Fecha_apli+ias';
Query1.ExecSQL;
Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
End;
end
Con esto ya simplificamos un poco el codigo.
Vamos a por otra.
Saludos
Responder Con Cita
  #4  
Antiguo 26-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Sigo con mis dudas, como sale modificado el codigo en el grid si usas un ExecSQL; para el Update, no lo entiendo.?
Recuerda que que grid es solo un visor de la tabla o tablas en si, creo que falta algo del codigo que estas haciendo, adicionalmente, me quedo corto con la pregunta.
Saludos
Responder Con Cita
  #5  
Antiguo 26-04-2007
Avatar de jorelivi
jorelivi jorelivi is offline
Miembro
 
Registrado: abr 2007
Posts: 45
Poder: 0
jorelivi Va por buen camino
gracias Caral

Mira Caral,

Este es mi codigo que tengo en un boton para actualizar dos situaciones diferentes dentro de un grid.

Código Delphi [-]
procedure TForm1.BitBtn2Click(Sender: TObject);
var sQuery:String;
var I:Integer;
begin
  if DbGrid1.SelectedRows.Count>0 then  // por si solo seleccionan uno...
     for I := 0 to DbGrid1.SelectedRows.Count-1 do
     begin
       DbGrid1.DataSource.DataSet.BookMark := DbGrid1.SelectedRows[i];
       // Todo lo que tengas que hacer
           sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+ias';
           Query1.Close;
           Query1.SQL.Clear;
           Query1.SQL.Add(sQuery);
           Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
           Query1.ExecSQL;
     end
  else
  // Todo lo que tengas que hacer
   If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
       sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+ias Where cclie=:cclie';
       Query1.Close;
       Query1.SQL.Clear;
       Query1.SQL.Add(sQuery);
       Query1.ParamByName('cclie').AsString:=Edit1.Text;
       Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
       Query1.ExecSQL;
    End;
end;
Espero esto sea mas claro, sigo en linea y gracias por tu tiempo
__________________
La sabiduría de los sabios y la experiencia de los siglos pueden ser conservadas con las citas.
Atte.
Jorelivi
Responder Con Cita
  #6  
Antiguo 26-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
La verdad me queda un poco largo, pero para mi el problema esta en que haces un recorrido por el dbgrid, con esto, para mi le estas diciendo al programa que actualice todo lo que este en el grid, no se, me parece por ahi.
El codigo lo entiendo, entiendo mas o menos el problema, tambien creo que se puede reducir el codigo un poco, sera mejor para analizar.
Soy muy probablemente mas novato que tu, asi que no esperes mucho.
Saludos
Responder Con Cita
  #7  
Antiguo 26-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
La verdad esta linea no la entiendo, Por que?
Código Delphi [-]
 DbGrid1.DataSource.DataSet.BookMark := DbGrid1.SelectedRows[i];
El DbGrid1, sera igual al DbGrid1.SelectedRows[i] ???
Me explicas?
Saludos
Responder Con Cita
  #8  
Antiguo 26-04-2007
Avatar de jorelivi
jorelivi jorelivi is offline
Miembro
 
Registrado: abr 2007
Posts: 45
Poder: 0
jorelivi Va por buen camino
Jorelivi

Segun yo, es para llevar el control de los registros seleccionados??? o no?
__________________
La sabiduría de los sabios y la experiencia de los siglos pueden ser conservadas con las citas.
Atte.
Jorelivi
Responder Con Cita
  #9  
Antiguo 26-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Tiene su lojica, la verdad desconozco esto del dbgrid multiselect, nunca lo he trabajado, es mas no se como trabaja.
Normalmente lo hago diferente, seguro me complico pero cuando quiero una seleccion grande de datos, los guardo en otra tabla, defino en otro grid si son los que en verdad queria o necesitava y luego, actualizo u otro.
En este tipo de programa uso mucho el PageControl y bueno me simplifico la vida asi.
Seguro hay muchas formas de matar moscas.
Siento no poder ayudarte con esto, tal vez algun otro forista.
Saludos
Responder Con Cita
  #10  
Antiguo 26-04-2007
Avatar de jorelivi
jorelivi jorelivi is offline
Miembro
 
Registrado: abr 2007
Posts: 45
Poder: 0
jorelivi Va por buen camino
DbGrid

De ante mano te estoy agradecido por todo el tiempo que te tomaste, sigo en line para dicho problema, gracias y cuidate.

Oye de donde eres?
__________________
La sabiduría de los sabios y la experiencia de los siglos pueden ser conservadas con las citas.
Atte.
Jorelivi
Responder Con Cita
  #11  
Antiguo 26-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Soy Español y Vivo en Costa Rica.
Saludos
Responder Con Cita
  #12  
Antiguo 26-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Roman, Puedes darnos una mano con esto?
Por Favor.
Saludos
Responder Con Cita
  #13  
Antiguo 27-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.561
Poder: 25
egostar Va camino a la fama
Antes de meternos con tu proceso de actualización, lo que yo creo es que primero debes de saber que registro estas buscando para de esa manera hacer lo que quieres.

Para saber que registros has seleccionado realiza este proceso

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i: Integer;
begin
  if DBGrid1.SelectedRows.Count > 0 then
  begin
    with DBGrid1.DataSource.DataSet do
    begin
      for i := 0 to DBGrid1.SelectedRows.Count-1 do
      begin
        GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
        ShowMessage(Table1.FieldByName('cclie').AsString);
        // No se si estas usando un TTable o un TQuery.
        // Cambialo a tu conveniencia.
      end;
    end;
  end
end;

Una vez que obtengas esto ya puedes hacer lo que quieras.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #14  
Antiguo 27-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola egostar
Muy interesante el concepto, lo vi en el help de delphi pero me quede colgado pensando si era lo correcto o no, ya sabes, aprendiz.
Saludos Maestro.
Responder Con Cita
  #15  
Antiguo 27-04-2007
Avatar de jorelivi
jorelivi jorelivi is offline
Miembro
 
Registrado: abr 2007
Posts: 45
Poder: 0
jorelivi Va por buen camino
Actualizar Grid

Es correcto pero como actualizo los datos que estan despues del message, pues cuando no selecciono ningun registro del Grid si lo hace pero caso contrario me manda un error.
Código Delphi [-]
  if DBGrid1.SelectedRows.Count > 0 then
    begin
      with DBGrid1.DataSource.DataSet do
      begin
        for i := 0 to DBGrid1.SelectedRows.Count-1 do
        begin
          GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
          ShowMessage(Query1.FieldByName('Docto').AsString);
          // No se si estas usando un TTable o un TQuery.
          // Cambialo a tu conveniencia.
             sQuery:='Update Fecha_venc Set Fecha_venc=Fecha_apli+ias Where Docto=octo';
             Query1.SQL.Add(sQuery);
             Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
             Query1.ExecSQL;
        end;
      end;
    end

Disculpen soy novato.
__________________
La sabiduría de los sabios y la experiencia de los siglos pueden ser conservadas con las citas.
Atte.
Jorelivi
Responder Con Cita
  #16  
Antiguo 27-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.561
Poder: 25
egostar Va camino a la fama
Bueno,

Aqui vamos a ver cual es tu problema.

En esta linea

Código Delphi [-]
sQuery:='Update Fecha_venc Set Fecha_venc=Fecha_apli+:dias Where Docto=:docto';

Fecha_venc=Fecha_apli+:dias, Esto no me hace sentido, como es que estas sumando Fechas_Apli + :dias, yo lo haria de otra forma

Usaremos otra variable que se llame Fechas donde vamos a realizar la suma de Fecha_Apli y dias.

Docto=:docto Aqui no estas pasando el parámetro docto, asi que hay otro error.

Veamos como lo soñe yo.

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
   i: Integer;
begin
  if DBGrid1.SelectedRows.Count > 0 then begin
     with DBGrid1.DataSource.DataSet do begin
                   for i := 0 to DBGrid1.SelectedRows.Count-1 do begin
                       GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i])); [/font]      [font=Arial]
                        sQuery:='Update Fecha_venc Set Fecha_venc= :fecha Where Docto  = :docto';
                        Query1.SQL.Add(sQuery);                                    
                         //No se que tipo de dato es docto, asi que le pongo String
                        //y estoy usando Table1 porque nbo se que uses para mostrar el DbGrid
                    Query1.ParamByName('docto').AsString:=  Table1.FieldByName('docto').AsString;
                    Query1.ParamByName('fecha').AsInteger:= Table1.FieldByName('Fecha_Apli').AsInteger + StrtoInt(Edit4.Text);
                    Query1.ExecSQL; 
                   end;
            end;
       end
end;

Trata de hacerlo y nos cuentas.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 27-04-2007 a las 00:57:31.
Responder Con Cita
  #17  
Antiguo 27-04-2007
Avatar de jorelivi
jorelivi jorelivi is offline
Miembro
 
Registrado: abr 2007
Posts: 45
Poder: 0
jorelivi Va por buen camino
Que amable egostar, de verdad que quiero ser mas adelante parte de su foro en cuanto a aportar algunos conocimientos.

Sin embargo, ahora tengo mis detalles todavia.

Mi Fecha_apli, es un campo de mi archivo al cual le voy a sumar unos X numero de dias para tener en fecha_venc la fecha de vencimiento de un docto.

El ejemplo que me enviaste no lo digiero muy bien, aunque es muy bien explicado.
__________________
La sabiduría de los sabios y la experiencia de los siglos pueden ser conservadas con las citas.
Atte.
Jorelivi
Responder Con Cita
  #18  
Antiguo 27-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.561
Poder: 25
egostar Va camino a la fama
Bueno, estoy asumiendo que Fecha_Apli es parte del registro que se va a modificar y solo se le suman los dias que capturas en el Edit4.

Eso nos dará lo que quieres en la Fecha_Venc.

Seria bueno que nos dieras mas información de como esta tu programa para poder ser mas exactos en las respuestas.

Y que es lo que no digieres del ejemplo que te puse.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #19  
Antiguo 27-04-2007
Avatar de jorelivi
jorelivi jorelivi is offline
Miembro
 
Registrado: abr 2007
Posts: 45
Poder: 0
jorelivi Va por buen camino
Boton Acualizar

Este es el procedimiento que estoy tratando de hacer funcionar para la actualizacion del campo Fecha_venc en base a una fecha_apli que es otro campo y a unos dias que se capturan en edit4.
Pero al dar el quiery1.execsql, me manda un error de Keyboar
Creo que ya casi esta pero falta grabar correctamente.

Código Delphi [-]
procedure TForm1.BitBtn2Click(Sender: TObject);
var sQuery:String;
var I:Integer;
begin
  if DBGrid1.SelectedRows.Count > 0 then begin
     with DBGrid1.DataSource.DataSet do begin
                   for i := 0 to DBGrid1.SelectedRows.Count-1 do begin
                       GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
                        sQuery:='Update Fecha_venc Set Fecha_venc= :fecha Where Docto  = :docto';
                        Query1.SQL.Add(sQuery);
                    Query1.ParamByName('docto').AsString:=  Query1.FieldByName('docto').AsString;
                    Query1.ParamByName('fecha').AsDateTime:= Query1.FieldByName('Fecha_Apli').AsDateTime + StrtoInt(Edit4.Text);
                    Query1.ExecSQL;
                   end;
            end;
       end
    else
// Todo lo que tengas que hacer
   If MessageDlg('Desea actualizar los registros',mtConfirmation,[mbYes,mBNo],0)= MrYes Then Begin
       sQuery:='Update cuen01 Set Fecha_venc=Fecha_apli+ias Where cclie=:cclie';
       Query1.Close;
       Query1.SQL.Clear;
       Query1.SQL.Add(sQuery);
       Query1.ParamByName('cclie').AsString:=Edit1.Text;
       Query1.ParamByName('dias').AsInteger:=StrtoInt(Edit4.Text);
       Query1.ExecSQL;
    End;
End;
__________________
La sabiduría de los sabios y la experiencia de los siglos pueden ser conservadas con las citas.
Atte.
Jorelivi

Última edición por jorelivi fecha: 27-04-2007 a las 01:27:18.
Responder Con Cita
  #20  
Antiguo 27-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno aqui me perdi, campo fecha integer?
Salio un table adicional?, bien dice Egostar, con que componente se presenta la informacion al grid.?
Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
   i: Integer;
begin
  if DBGrid1.SelectedRows.Count > 0 then begin
     with DBGrid1.DataSource.DataSet do begin
                   for i := 0 to DBGrid1.SelectedRows.Count-1 do begin
                       GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i])); [/font]      [font=Arial]
                        sQuery:='Update Fecha_venc Set Fecha_venc= :fecha Where Docto  = :docto';
                        Query1.SQL.Add(sQuery); 
                        //No se que tipo de dato es docto, asi que le pongo String
                        //y estoy usando Table1 porque nbo se que uses para mostrar el DbGrid
                    Query1.ParamByName('docto').AsString:=  Table1.FieldByName('docto').AsString;
                    Query1.ParamByName('fecha').AsDate:= Table1.FieldByName('Fecha_Apli').AsDate + DateToStr(Edit4.Text);
                    Query1.ExecSQL; 
                   end;
            end;
       end
end;
Me explican?
Saludos
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
actualizar un campo juangabriel1786 API de Windows 1 19-10-2006 19:30:55
¿cómo Actualizar Un Campo De Una Consulta En Un Dbgrid? dibe Conexión con bases de datos 2 07-09-2006 00:54:54
Actualizar CAMPO del registro seleccionado con DBGrid,TQUERY y UpdateSQL cronixxx Conexión con bases de datos 0 05-07-2005 23:33:05
Actualizar un campo segun opcion de picklist de otra columna de un dbgrid nefy Conexión con bases de datos 5 17-01-2004 20:11:34
Actualizar campo calculado de DBGrid Agar23 Varios 3 12-11-2003 08:27:36


La franja horaria es GMT +2. Ahora son las 08:28:52.


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