vaciando tablas en access...

Iniciado por Hans el Topo, 4 Julio 2006, 18:04 PM

0 Miembros y 1 Visitante están viendo este tema.

Hans el Topo

bueno llevo buscando informacion sobre como vaciar tablas en access... ya que el truncate no me funciona y con el delete el autoincremental no me lo disminuye... como puedo vaciar una tabla en access?? xk access es tan tiñoso??
 

Red Mx

buena pregunta

si la tienes enlazada con el ADO o DATA pon un timer con intervalo de 100 ahi le das el codigo de que avance ala primera  despues lo borras y ahi le pones un if cuando llege al EOF termine y pare el timer para que no truene  y asi borrar todo, el timer ponerselo desavilitado y con un boton avilitarlo
Desarrollar Malware Es Causa De Cancer...

soplo

Hola
Pues borrar todo
dim Base as database
set base=opendatabase("c:\...\datos.mdb")
base.execute "delete * from tabla"


Para cambiar el autoincremental lo que tienes que hacer es eliminar el campo y volverlo a crear.

Para ello deberás acceder a la colección de índices (habitualmente está indexado) y borras el índice, luego accedes a la colección te tablas y te situas en la que necesitas y allí accedes a la colección de campos y lo eliminas.

Luego lo vuelves a crear.

Ya puestos tambien podrías hacer un compactdatabase para que quedara físicamente vaciada.

Un saludo

Callar es asentir ¡No te dejes llevar!

Hans el Topo

Cita de: soplo en  4 Julio 2006, 23:28 PM
Hola
Pues borrar todo
dim Base as database
set base=opendatabase("c:\...\datos.mdb")
base.execute "delete * from tabla"


Para cambiar el autoincremental lo que tienes que hacer es eliminar el campo y volverlo a crear.

Para ello deberás acceder a la colección de índices (habitualmente está indexado) y borras el índice, luego accedes a la colección te tablas y te situas en la que necesitas y allí accedes a la colección de campos y lo eliminas.

Luego lo vuelves a crear.

Ya puestos tambien podrías hacer un compactdatabase para que quedara físicamente vaciada.

Un saludo



uhm...
y no tiene un comando parecido al truncate de sql?
si no lo tiene pos otra cosa tiñosa más que tiene access...xD
otra preguntita... para enviar sentencias en los updates que solo afecten a un registro en donde se supone kque va intercalado el TOP 1 ?


gracias a todos por responder
 

soplo

Citar¿no tiene un comando parecido al truncate de sql?
compactdatabase "recorta" el tamaño de la base de datos hasta el mínimo en que quepan todos los registros.

Es una buena costumbre usarlo en bases de datos que se usan mucho para evitar problemas de bases de datos corruptas.

Citarpara enviar sentencias en los updates que solo afecten a un registro en donde se supone kque va intercalado el TOP 1 ?

No te entiendo bien, en principio tienes que buscar una claúsula where que la cumpla solo el registro que tu quieres.

Por eso es una muy buena costumbre en cada tabla crear un campo autonumérico que sirva para identificar el registro sin ninguna duda.

;D
Callar es asentir ¡No te dejes llevar!

Hans el Topo

Cita de: soplo en  5 Julio 2006, 20:12 PM
Citar¿no tiene un comando parecido al truncate de sql?
compactdatabase "recorta" el tamaño de la base de datos hasta el mínimo en que quepan todos los registros.

Es una buena costumbre usarlo en bases de datos que se usan mucho para evitar problemas de bases de datos corruptas.
yo lo que digo es que haga el truncate... el truncate en mysql lo que hace es vaciarte la tabla de registros, y los autoincrementales inicializarlos a 0 registros (ya que no hay registros en la tabla)...
el compactdatabase  según he leído/ me has explicado no borra registros...

Citar
Citarpara enviar sentencias en los updates que solo afecten a un registro en donde se supone kque va intercalado el TOP 1 ?

No te entiendo bien, en principio tienes que buscar una claúsula where que la cumpla solo el registro que tu quieres.

Por eso es una muy buena costumbre en cada tabla crear un campo autonumérico que sirva para identificar el registro sin ninguna duda.

;D

Citar
cuando yo envio una sentencia en mysql en la que le digo...
update tablita set pepinos=99 where pepinos<10  LIMIT 1
entonces lo que esa sentencia me hace es actualizarme el primer pepinos que encuentre menor de 10... en access según he descubierto en vez de poner LIMIT se usa algo parecido... el TOP
ejemplo, vamos a seleccionar un único registro que cumpla la caracteristiac solicitada(aunque no tenga lógica...):
Mysql
select pepinos from tablita where pepinos<10 limit 1
Access
select TOP 1 pepinos from tablita where pepinos<10

a eso me refería.... en access en el update donde se coloca el TOP xk poniendolo en la misma zona que en el select me da error... aligual tampoco se puede actualizar un solo registro... otra tiñosidad de access

xk le quiero añadir el LIMIT/TOP al update?
pues xk como tengo un campo autoincremental con un nº único ... solo necesito actualizar 1... y no recorrer toda la tabla tras habermelo actualizado ya el que deseo... nose si será correcto pero por eso me interesa... aunque ya se esta convirtiendo en ALGO PERSONAL contra access ... xD
 

soplo

¿Y si tienes los registros con un campo autoincremental para que quieres el limit?
base.execute "delete * from tabla where codigo=tuvalor
¿Que ganas añadiendo a eso un límite si ya le has dicho que borre los códigos que tienen valor X y ese valor X es un valor único en la tabla porque es un campo autoincremental?

:rolleyes:
Callar es asentir ¡No te dejes llevar!

Hans el Topo

Cita de: soplo en  5 Julio 2006, 23:19 PM
¿Y si tienes los registros con un campo autoincremental para que quieres el limit?
base.execute "delete * from tabla where codigo=tuvalor
¿Que ganas añadiendo a eso un límite si ya le has dicho que borre los códigos que tienen valor X y ese valor X es un valor único en la tabla porque es un campo autoincremental?

:rolleyes:

pues ave si logro explicarme... xd

por ejemplo...
si yo quiero borrar un registro de una tabla que contiene 1000000... y envio la consulta
delete * from table where pepito="sodomita"
eso me borraria todas las que cumpliesen el requisito del where...
si en el where tengo una condición basada en un campo autoincremental... pues se supone que solo voy a encontrar uno que borrar y la búsqueda va recorrer 1000000 de registros , usease todos...
(en los campos autoincrementales nose si eso es cierto)

si en el where tengo una condición basada en un campo no autoincremental... y aun asi solamente afecta a 1 registro,
me va a borrar 1 registro... pero va a recorrerse 1000000...

si yo le añado un LIMIT/TOP 1 , en cuanto me borre uno parara y no recorrera 1000000 sino solamente hasta que borre uno...
a eso me referio con la utilidad del LIMIT/TOP, para que quiero recorrer todo si se cuantos va a encontrar/borrar/actualizar ...etc...

referido a lo de truncate, ¿tendré que asumir k access no tiene ningún comando para vaciar tablas?

gracias de antemano por responder soplo ... iluminame con tu sabiduria  ;D :rolleyes: :P
 

Hans el Topo

por cierto... he probado a borrar los campos autoincrementales y luego a volverlos a crear y me sigue guardando el autoincremental de antes ... xD
 

soplo

Que yo sepa access no tiene ningún comando para vaciar tablas jajaja

Citarpor cierto... he probado a borrar los campos autoincrementales y luego a volverlos a crear y me sigue guardando el autoincremental de antes ... xD
Eso es porque no has borrado el campo y lo has vuelto a crear. Si lo hubieras hecho empezaría de nuevo por 1

;D
Callar es asentir ¡No te dejes llevar!