Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Multiselect DBGRID (https://www.clubdelphi.com/foros/showthread.php?t=95680)

kainchu3102 07-05-2022 19:55:37

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

Garada 07-05-2022 22:14:04

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.

kainchu3102 08-05-2022 00:00:16

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;

kainchu3102 08-05-2022 00:16:54

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;

Garada 08-05-2022 12:33:32

Cita:

Empezado por kainchu3102 (Mensaje 546769)
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"?


La franja horaria es GMT +2. Ahora son las 11:20:34.

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