Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problema Borrar varias filas de dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=68011)

Kenobi 19-05-2010 18:09:18

problema Borrar varias filas de dbgrid
 
Hola amigos....
buscando en el foro encontre una solucion para recorrer la filas seleccionadas de un tmsdbgrid, sin embargo me genera errores en caso de eliminar dichas filas....

Código Delphi [-]
for i := 0 to Grid.SelectedRows.Count - 1 do
Begin
Grid.GotoSelection(i);
consulta.delete
End;
Grid.SelectedRows.Clear;

si marco filas intercaladas me elimina la siguiente a la marcada, luego luego elimina cosas que no quiero y deja de eliminar otras que si quiero

creo que en el delete cuando elimino un registro el cursos salta al siguiente y pues zasss tambien lo borra, en todo caso les pregunto a ver que me dicen, antes de aplicar una solucion fea(algo como recorrer guardando los indices en un array para luego recorrer el array y eliminar las filas que coincidan con el indice del array)


Gracias por su ayuda....

Caro 19-05-2010 19:02:59

Hola Kenobi, prueba con esto:

Código Delphi [-]
  DBGrid.SelectedRows.Delete:

Saluditos

gonza_619 10-08-2010 16:43:25

Cita:

Empezado por Caro (Mensaje 364638)
Hola Kenobi, prueba con esto:

Código Delphi [-] DBGrid.SelectedRows.Delete:


Saluditos

hola, miren yo tengo un problema distinto al eliminar una fila seleccionada sobre un dbgrid. en primer lugar tengo 2 table relacionados , osea un maestrodetalle, lo que hice fue poner un dblookupcombobox, para el maestro, entonces cuando selecciono un registro de esa tabla maestra por medio de l combobox en el grid me aparece los datos relacionados.
Bien para insertar un registro use
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  Valor, Maximo: Integer;

begin
  Maximo := 0;
  Table1.First;
  table2.Active:=false;

  while not Table1.EoF do
  begin
    Valor := Table1.FieldByName('cod_curso').AsInteger;
    if Valor > Maximo then
      Maximo := Valor;

    Table1.Next;
  end;
  table2.Active:=true;
maximo:=maximo+1;
table1.Insert;
table1.FieldByName('cod_curso').asinteger:=maximo;

luego guardo, pero el problema es cuando elimino una fila q seleccione en el dbgrid solo puse: table1.delete y me da error (master has detail records cannot delete or modify),
mi intencion es hacerlo de esa manera , quisiera saber si ahi alguna solucion, o que tendria q modificar en el codigo o agregar , gracias

ecfisa 10-08-2010 19:32:58

Hola gonza.

Primero un consejo: Te conviene agregar un nuevo hilo para tu consulta.
Vas a tener más oportunidades de obtener una respuesta satisfactoria. (Ya que más gente va a leer el post y se vá a tratar tu tema en particular).

El error que te arroja es lógico y te dice que no puede borrar el registro actual puesto que hay otros registros que dependen de él.

Hay bases de datos que permiten el borrado en cascada y otras que nó, debiéndolo hacer vos por código.
Por lo que para ayudarte a solucionarlo, deberías especificar con que base de datos estás trabajando.

Saludos. :)

gonza_619 10-08-2010 20:05:13

como eliminar fila de dbgrid
 
bueno las tablas las hice en paradox

AzidRain 10-08-2010 20:12:17

Casi siempre surge la confusión con el uso de los grids, solo hay que recordar que cualquier grid no es mas que la representación de lo que contiene una tabla o query, es mejor hacer cualquier cambio directamente en la tabla y el grid en automático responde.

gonza_619 10-08-2010 20:28:39

Cita:

Empezado por AzidRain (Mensaje 373113)
Casi siempre surge la confusión con el uso de los grids, solo hay que recordar que cualquier grid no es mas que la representación de lo que contiene una tabla o query, es mejor hacer cualquier cambio directamente en la tabla y el grid en automático responde.

ok, si lo se por eso buscaba algun codigo distinto para poder eliminar, pensaba en quizas desactivar la tabla maestro y despues eliminar el registro de la tabla detalle y despues volver a acivarlo, es mas lo probe y me da el mismo error, bueno espero alguna ayuda gracias a tdos
table2.active:=false;
table1.delete;
table2.active:=true;
probe con un navigator pero tambien me da el mismo error

Caral 10-08-2010 20:29:08

Hola
Un masterdetail lo que hace es ligar dos tablas (o mas) esto para hacer normalmente un enlace de dos dbfrid.
Cuando se llama a un master la relacion es filtrada por el campo requerido, la palabra magica, FILTRADA.
Ninguna tabla aceptara borrar campos filtrados por un Table, solamente por sql.

Saludos
PD: Independientemente de la BD.

AzidRain 10-08-2010 20:52:20

Si definiste bien tus tablas, (no mencionas que motor usas) debiste haber colocado las dependencias entre la tabla maestra y la de detalle de manera que cuando borres un registro de la maestra, en automático se borren los detalles (en algunos motores se usa CASCADE).

Lo que dice caral es correcto, por eso no puedes borrar a partir de un grid, tienes que hacerlo directamente en la tabla.

Por otro lado el mensaje de error mismo te da la respuesta: "la tabla maestra tiene registros de detalle, no se puede borrar"...solución: primero borra todo detalle del registro maestro y luego el registro maestro. Ojo: tienes que cerrar las 2 tablas para hacer la operación.

ecfisa 10-08-2010 21:47:27

Cita:

Empezado por gonza_619 (Mensaje 373112)
bueno las tablas las hice en paradox

Hola de nuevo gonza.

Paradox no implementa actualizaciones en cascada.

En este enlace ya han respondido como hacerlo.

Saludos.


La franja horaria es GMT +2. Ahora son las 07:00:48.

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