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 20-06-2022
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
borrar todos los registros de una Tabla

Buenas, tengo Delphi 2.010 y uso Firebird 2.5.


Quiero borrar todos los registros de una Tabla, y dejarla limpiar para ello utilizo el siguiente código

Código Delphi [-]

                 TablaPedidos.Active:=true
                 while not TablaPedidos.Eof do
                     begin
                       Tablapedidos.delete;
                       TablaPedidos.next;
                     end;

Pero sólo me borra registros a saltos si hay 1000 registros, me borra 300 salteados 3 no los borra 1 si si lo borra, tengo que pasar cuatro o cinco veces este codigo para que lo borre todo,

He estado mirando en internet pero todos los códigos son parecido a este, pero no sé por qué no los borra todos y deja la tabla limpia.

Si me pueden ayudar, gracias.
Responder Con Cita
  #2  
Antiguo 20-06-2022
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
y porque no usas mejor un delete from tabla ???

tambien le estas haciendo next lo que hace que el siguiente registro activo lo salte
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 20-06-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hay varias formas de borrar todos registros de una tabla. Una de ellas es la que has puesto tú, pero es la menos eficiente. Peor (de eficiencia) cuantos más registros existan en la tabla.

Digamos que si estás utilizando componentes (como estás haciendo tú), en este caso parece un TTable, puedes utilizar el método EmptyTable, que en un sólo paso borra todos los regstros de la tabla.
Revisa este link:
https://docwiki.embarcadero.com/Libr...ble.EmptyTable

Estaría bien tanto con el código que has puesto antes, como con el EmptyTable, utilizar los métodos EnebleControls y DisableControls, para bloquear el refresco visual (acelera mucho las operaciones, sobre todo cuando hay muchos registros).
Revisa este link:
https://docwiki.embarcadero.com/Libr...EnableControls
Ahí mismo tienes un ejemplo de utilización.

Más rápido que los anteriores (que usan componentes) es hacerlo directamente sobre la Base de datos, con un TQuery por ejemplo (como ya te ha comentado [oscarac]), y con la SQL sencilla para borrar todos los registros.

Con todo esto deberías poder borrar TODOS los registros de la tabla. Cualquiera de los métodos, más lento o más debería hacerlo.
Otro problema es porqué no te borra todos los registros (cuando debería hacerlo, como te he dicho), con tu código.

Sólo se me ocurre que tengas relaciones entre registros y por temas de claves foráneas (por ejemplo) y eso esté impidiendo que se borren.
¿Es posible?
¿Estás capturando excepciones de alguna forma que enmascaren esos errores?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 20-06-2022
chenech chenech is offline
Miembro
 
Registrado: dic 2013
Posts: 72
Poder: 11
chenech Va por buen camino
Borrado

Cuando haces un delete se posiciona en el siguiente registro, por lo cual el next siguiente te avanza al siguiente de nuevo y ese no lo borra.
Simplemente quita el next y ya está, resumiento, o delete o next, ambos avanzan una posicion.
Yo lo uso para borrados selectivos por ejemplo, si se cumple una condicion delete, else next, pero nunca los dos a la vez.
Un saludo.
Responder Con Cita
  #5  
Antiguo 20-06-2022
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
Gracias a todos, en principio se me ha solucionado, quitando la siguiente línea,
Código Delphi [-]
                           tablapedidos.next;

la proxima vez utilizaré EmptyTable, aunque ha sido rápido con delete, compararé para tener más recursos.

Gracias.
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
Borrar registros en una tabla CFPA86 Varios 9 05-06-2007 08:51:50
Borrar todos los datos de una tabla dariana20 SQL 8 07-06-2006 17:09:04
borrar todos los registros de un tabla Giniromero Conexión con bases de datos 4 18-12-2003 11:47:20
Borrar registro en tabla maestra y todos los de la tabla detalles correspondientes jealousy Conexión con bases de datos 7 14-10-2003 12:46:23


La franja horaria es GMT +2. Ahora son las 19:35:18.


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