Ir al contenido



Foto

Vaciar una tabla


  • Por favor identifícate para responder
8 respuestas en este tema

#1 bosoft

bosoft

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 28 agosto 2016 - 02:41

Hola
Hace años hice una pequeña aplicación gratuita con builder 2007 con access para una ong y ahora la gente de esta ong me pide que haga una pequeña ampliación al programa para lo cual tengo que poner a cero una tabla y que empiece a contar el autoincrement desde 1


cpp
  1. filtrocon->SQL->Clear();
  2. filtrocon->SQL->Add("TRUNCATE TABLE control");
  3. filtrocon->Active=true;
  4. filtrocon->Close();

Me da este error:

 

---------------------------
Debugger Exception Notification
---------------------------
Project socios.exe raised exception class EOleException with message 'Instrucción SQL no válida; se esperaba 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' o 'UPDATE''.
---------------------------
Break Continue Help
---------------------------

 

Mis preguntas son:

¿hay alguna sentencia para access que limpie la tabla y deje el autoincrement a 0? Tengo entendido que DELETE FROM no pone a 0 el autoincrement

¿es mejor hacer un DROP y un CREATE?

Saludos


  • 0

#2 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 355 mensajes

Escrito 28 agosto 2016 - 03:55

La sentencia TRUNCATE no existe en Access tengo entendido.

Primero y antes que nada te recomienedo hacer una copia de seguridad obviamente.

 

Pero una vez en mi universidad lo que hicimos fue compactar la base de datos. Deberias buscar bien como se hace.

Buscando en internet se puede hacer lo siguiente:

En vista de diseño de la correspondiente tabla:
1.- Elimina el campo Autonumerico (anota el nombre del campo)
2.- Inserta una nueva fila
3.- Se pone el mismo nombre que tenia antes, para en caso de indexacion, no se modifique los datos de busqueda.
4.- Se le asigna el tipo "Autonumerico"
5.- Guardar cambios.


  • 0

#3 bosoft

bosoft

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 28 agosto 2016 - 05:07

Gracias por tu solución
No necesito copia de seguridad ya que los datos de esa tabla no sirven para nada. Viendo que es un poco "lioso" poner a 0 el auto y antes tendría que borrar los datos con un DELETE, casi me inclino a hacer un DROP y crear la tabla de nuevo. Pero sigo abierto a sugerencias

 

Gracias

Saludos


  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.438 mensajes
  • LocationMéxico

Escrito 28 agosto 2016 - 07:18

La recomendación del creador de ACCESS sugiere lo siguiente:

Cómo restablecer el valor de un campo Autonumérico en Access
 
Y me parece que es la misma que nos ha dado nuestro amigo giulichajari

 

Saludos


  • 0

#5 bosoft

bosoft

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 28 agosto 2016 - 07:36

Es que se trata de vaciar de datos la tabla y, con ello, restablecer el autonumérico 0.

Como, según dice giulichajari, parece ser que el TRUNCATE no existe en access, ¿como vaciar la tabla y restablecer el auto 0 al mismo tiempo? o mejor dicho ¿cual es la forma mas rápida de hacer reset a una tabla vaciando datos?

 

Gracias egostar

 

Saludos


  • 0

#6 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 636 mensajes
  • LocationArgentina

Escrito 28 agosto 2016 - 11:22

Por que necesitas el auto incremental en 0?

Editado por Agustin Ortu, 28 agosto 2016 - 11:23 .

  • 0

#7 bosoft

bosoft

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 29 agosto 2016 - 01:43

Para volver a poner los datos desde 0. No pasaría nada si el auto no se pusiera a cero, pero como 3 o 4 meses la tabla debe vaciarse, llegaría momento que el auto sería enorme, aunque estemos hablando de 300 o 400 registros cada vez. Esta aplicación es para una ONG a la que no voy a cobrarle nada y tampoco tendré acceso a su pc

 

Saludos


  • 0

#8 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 636 mensajes
  • LocationArgentina

Escrito 29 agosto 2016 - 03:39

No debería importarte el valor del auto incremental. Mientras genere números únicos es suficiente. Es un error que tu programa lo use para otra cosa que no sea identificar un registro y crear relaciones.

Los usuarios no deberían nunca ver el valor del Id. Si necesitas un valor numérico secuencial lo podés computar de otra manera. Por ejemplo usando tabla.RecNo o creando un campo calculado
  • 0

#9 bosoft

bosoft

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 29 agosto 2016 - 05:34

Gracias por tu consejo, pero no uso el auto para nada que no sea enumerar los registros y es solo visible desde office access.

De todas formas nos estamos desviando del problema, que es dejar una tabla limpia como si se acabara de crear y, visto lo visto, no veo otra solución que:


cpp
  1. //limpiar tabla
  2. filtrocon->Close();
  3. filtrocon->SQL->Clear();
  4. filtrocon->SQL->Add("DROP TABLE control");
  5. filtrocon->ExecSQL();
  6. filtrocon->Close();
  7.  
  8. filtrocon->SQL->Clear();
  9. filtrocon->SQL->Add(SQL_CREA_control);
  10. filtrocon->ExecSQL();
  11. filtrocon->Close();

Pero sigo abierto a rutinas mejores.

Gracias

 

Saludos


  • 0