Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Hans el Topo en 4 Julio 2006, 18:04 pm



Título: vaciando tablas en access...
Publicado por: Hans el Topo en 4 Julio 2006, 18:04 pm
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??


Título: Re: vaciando tablas en access...
Publicado por: Red Mx en 4 Julio 2006, 21:43 pm
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


Título: Re: vaciando tablas en access...
Publicado por: soplo en 4 Julio 2006, 23:28 pm
Hola
Pues borrar todo
Código:
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



Título: Re: vaciando tablas en access...
Publicado por: Hans el Topo en 5 Julio 2006, 01:48 am
Hola
Pues borrar todo
Código:
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


Título: Re: vaciando tablas en access...
Publicado por: 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.

Citar
para 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


Título: Re: vaciando tablas en access...
Publicado por: Hans el Topo en 5 Julio 2006, 22:58 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
Citar
para 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...
Có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
Código:
select pepinos from tablita where pepinos<10 limit 1
Access
Código:
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


Título: Re: vaciando tablas en access...
Publicado por: soplo en 5 Julio 2006, 23:19 pm
¿Y si tienes los registros con un campo autoincremental para que quieres el limit?
Código:
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:


Título: Re: vaciando tablas en access...
Publicado por: Hans el Topo en 6 Julio 2006, 02:31 am
¿Y si tienes los registros con un campo autoincremental para que quieres el limit?
Código:
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
Código:
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


Título: Re: vaciando tablas en access...
Publicado por: Hans el Topo en 6 Julio 2006, 19:31 pm
por cierto... he probado a borrar los campos autoincrementales y luego a volverlos a crear y me sigue guardando el autoincremental de antes ... xD


Título: Re: vaciando tablas en access...
Publicado por: soplo en 6 Julio 2006, 20:50 pm
Que yo sepa access no tiene ningún comando para vaciar tablas jajaja

Citar
por 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


Título: Re: vaciando tablas en access...
Publicado por: Hans el Topo en 6 Julio 2006, 22:58 pm
Que yo sepa access no tiene ningún comando para vaciar tablas jajaja

Citar
por 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

he borrado todos los registros y he borrado el campo desde la propia access!!

he guardado he salido
he vuelto a entrar... he creado uno nuevo... meto un registro...
y vualá valor del campo autoincremental 356 ... xddddd
esto es la ostia xddx


Título: Re: vaciando tablas en access...
Publicado por: soplo en 7 Julio 2006, 23:23 pm
No has borrado el campo y vuelto a crear tio
jajaja

Si modificas la estructura LA TIENES QUE SALVAR jajaja


Título: Re: vaciando tablas en access...
Publicado por: Hans el Topo en 8 Julio 2006, 01:47 am
No has borrado el campo y vuelto a crear tio
jajaja

Si modificas la estructura LA TIENES QUE SALVAR jajaja


 k siiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
k lo he intentando mil vecesssssssssssssssss
cachis ne la mar xd

lo k hice alfinal fue volver a crear todas las tablas xdxdxd
y he exo copias por si me hace falta resetearla access apesta!!