Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-05-2022
kainchu3102 kainchu3102 is offline
Miembro
 
Registrado: jul 2021
Posts: 79
Poder: 6
kainchu3102 Va por buen camino
Multiselect DBGRID

Buenas Tardes Gente, estoy estancado en medio de algo no puedo seguir, sepan disculparme si soy novato, tengo mi código para eliminar varias filas de un DBGRID con Multiselect, pero por alguna razon no me esta funcionando le agradecería su ayuda.
Código Delphi [-]
procedure TFORMABMCURSOS.BitBtn2Click(Sender: TObject);
  var
  X: Integer;

begin
  if DBGABMCURSO.SelectedRows.Count = 0 then
  begin
  Exit;
  ShowMessage('paso 1')
  end
  else
  begin
  for X := 0 to DBGABMCURSO.SelectedRows.Count -1 do

       With MDATOS_DANZA.FDQABMCUOTAS do
      Begin
      DBGABMCURSO.DataSource.DataSet.GotoBookmark(TBookmark(DBGABMCURSO.SelectedRows.Items[X]));
       SQL.Clear;
       SQL.Add ('DELETE FROM cuotas WHERE id_cuo = :ID_CUOE');
       Params.ParamByName('ID_CUOE').AsInteger := X ;
       ExecSQL;
       if RowsAffected = 1 then
       begin
          MDATOS_DANZA.FDTCUOTAS.Refresh;
          ShowMessage('paso 2')
       end;
         //FORMRESULTADOS.DBGRESULTADOS.DataSource.DataSet.Refresh;
       end;
          ShowMessage('paso 3')

  end;


end;


ese es el codigo
Responder Con Cita
  #2  
Antiguo 07-05-2022
Garada Garada is offline
Miembro
 
Registrado: jul 2004
Posts: 90
Poder: 23
Garada Va por buen camino
Me da que el error está en
Código Delphi [-]
Params.ParamByName('ID_CUOE').AsInteger := X
Estás asignando la variable índice del FOR (X) cuando lo que deberías es asignar el valor del campo del registro al que acabas de moverte.

Y me da que si haces un Refresh de la tabla dentro del bucle seguramente se reinicia también la propiedad Multiselect del DbGrid y pierdes esa información, compruébalo con el debugger.
Responder Con Cita
  #3  
Antiguo 08-05-2022
kainchu3102 kainchu3102 is offline
Miembro
 
Registrado: jul 2021
Posts: 79
Poder: 6
kainchu3102 Va por buen camino
respuesta

Probe de esta manera, anule el refresh y solo me muestra el el Showmessage( Paso 3) sigue sin hacer nada



Código Delphi [-]
    Params.ParamByName('ID_CUOE').AsInteger := DBGABMCURSO.SelectedRows ;
      
          //MDATOS_DANZA.FDTCUOTAS.Refresh;
Responder Con Cita
  #4  
Antiguo 08-05-2022
kainchu3102 kainchu3102 is offline
Miembro
 
Registrado: jul 2021
Posts: 79
Poder: 6
kainchu3102 Va por buen camino
Lo logre de esta manera, pero si elijo tres registro con multiselect para eliminar me los elimina bien, pero me muestra 3 veces el Showmessage('paso2') y 1 el Showmessage('paso3') jajaja cosa eloco.

Código Delphi [-]
procedure TFORMABMCURSOS.BitBtn2Click(Sender: TObject);
  var
  X: Integer;

begin
  if DBGABMCURSO.SelectedRows.Count = 0 then
  begin
  Exit;
  ShowMessage('paso 1')
  end
  else
  begin
     for X := 0 to DBGABMCURSO.SelectedRows.Count -1 do

       With MDATOS_DANZA.FDQABMCUOTAS do
      Begin
      DBGABMCURSO.DataSource.DataSet.GotoBookmark(TBookmark(DBGABMCURSO.SelectedRows.Items[X]));
           SQL.Clear;
       SQL.Add ('DELETE FROM cuotas WHERE id_cuo = :ID_CUOE');
        Params.ParamByName('ID_CUOE').Value := DBGABMCURSO.datasource.dataset.fieldbyname ('id_cuo'). Asinteger;
     
       ExecSQL;
       if RowsAffected = 1 then
       begin
        
          ShowMessage('paso 2')
       end;
         //FORMRESULTADOS.DBGRESULTADOS.DataSource.DataSet.Refresh;
       end;
          ShowMessage('paso 3')

  end;


end;
Responder Con Cita
  #5  
Antiguo 08-05-2022
Garada Garada is offline
Miembro
 
Registrado: jul 2004
Posts: 90
Poder: 23
Garada Va por buen camino
Cita:
Empezado por kainchu3102 Ver Mensaje
Lo logre de esta manera, pero si elijo tres registro con multiselect para eliminar me los elimina bien, pero me muestra 3 veces el Showmessage('paso2') y 1 el Showmessage('paso3') jajaja cosa eloco.
Y es correcto.

Código Delphi [-]
Params.ParamByName('ID_CUOE').Value := DBGABMCURSO.datasource.dataset.fieldbyname ('id_cuo'). Asinteger;
Este línea ya asigna el valor del campo como te comentaba.


"Paso2" ocurre cada vez que el borrado tiene éxito y "Paso3" al salir del bucle.

Aquí ya me he perdido con el objetivo del código.
Borrar los registros, ya los borra. ¿Qué quieres informar en "paso2" y en "paso3"?
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
Pasar registros de una DBGrid a otra Dbgrid usando multiselect Soa Pelaez Varios 4 08-03-2017 12:41:28
MultiSelect en DBGrid con Shift gluglu OOP 0 01-06-2007 02:22:04
Dbgrid y Multiselect jorge_mosquera OOP 3 26-04-2007 03:22:41
Multiselect con celdas en DBGrid??? Jonnathan OOP 0 26-09-2006 20:38:02
DBGrid y Bookmark sin MultiSelect gluglu Varios 2 18-05-2006 16:42:07


La franja horaria es GMT +2. Ahora son las 23:15:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi