Access - Eliminar columnas y mover

   
Vista:

Eliminar columnas y mover

Publicado por Nano (8 intervenciones) el 26/07/2013 07:42:25
Hola, soy más que novato en el tema de Access y me gustaría me pudierais echar una mano.
Tengo un archivo MDB, en él, van integradas varias Tablas con cuatro campos:
VAL / X / Y / NOMBRE

Lo que debo hacer es:
1.- Eliminar columna VAL en todas las tablas
2.- Mover al primer lugar la columna NOMBRE , quedando las Tablas así:
NOMBRE / X / Y

Se supone que con una macro se realiza esta tediosa tarea de eliminar y mover uno a uno cada elemento, pero no se por donde empezar.

Gracias por vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Eliminar columnas y mover

Publicado por 2pl (461 intervenciones) el 26/07/2013 07:59:11
No se por donde empezar pero cuando uno es más que novato según tu, lo primero que hay que hacer es leer algo de access.
El orden de los campos en las tablas no tiene mayor importancia ya que luego los puedes mostrar como quieras.
Para eliminar una campo solo tienes que entrar en diseño de las tablas y ahi borrar el campo que quieras.
Si quieres mover un campo, entras en diseño de las tablas, te situas en él y lo mueves como se hace en windows
PD: Si eres muy novato, primero leete algunos manuales y si no, la ayuda de access es estupenda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Eliminar columnas y mover

Publicado por Neckkito (1104 intervenciones) el 26/07/2013 08:07:09
Vaya, 2PL, parece que estábamos "operando" sobre la misma consulta al mismo tiempo... :)

Saludos!

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Eliminar columnas y mover

Publicado por Neckkito (1104 intervenciones) el 26/07/2013 08:05:23
Hola!

Un sistema muy simple para hacer lo que quieres, dado que comentas que no tienes mucha experiencia, es el que te propongo a continuación. Ahora bien, también te recomiendo que lo pruebes en una copia de tu BD, por si tienes algún desliz. Así no perderás la información original.

El sistema es el siguiente:

1.- Coges la primera tabla y manualmente le cambias el nombre. Por ejemplo, si la tabla se llama NANO pues le pones de nombre NANO-ORIGINAL

2.- Te creas una consulta sobre la tabla NANO-ORIGINAL, colocando los campos que necesites en el orden que necesites.

3.- Conviertes esa consulta en una consulta de creación de tabla. Cuando te pida el nombre de la nueva tabla le escribes NANO

4.- Ejecutas la consulta. Así tendrás la tabla NANO creada según la estructura que necesitas.

5.- Te recomendaría que abrieras la tabla NANO recién creada en vista diseño y echaras un vistazo a los tipos de campos, para ajustarlos según sea el tipo de dato que realmente contienen.

Y así con el resto de tablas.

Si no necesitaras las tablas origen (NANO-ORIGINAL), una vez realizadas las operaciones, pues simplemente las borras.

A ver si el sistema te va bien.

Un saludo,


http://neckkito.siliconproject.com.ar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar columnas y mover

Publicado por Nano (8 intervenciones) el 26/07/2013 08:44:11
Vaya rapidez en las respuestas, gracias, voy con mis dudas:

2pl : ¿Lo que quieres decir es hacerlo manualmente una por una?
Si es así, eso no es problema, lo estoy haciendo así, pero cuesta un tiempo engorroso.
La historia es hacer una macro u orden que tome todas las tablas y haga esa operación.

Neckkito : Creo entender en tu propuesta es hacer lo mismo manualmente una tabla por una ¿no?
Pero como digo anteriormente, eso ya lo estoy haciendo.

He visto por internet alguna "formula" para borrar columnas, pero no es efectiva.

Soy neófito, en esto del access aunque se de programación, pero no en este mundo del sql y Access.

Lo ideal es aplicar una formula Macro, el problema es hacerla bien

Gracias por vuestra ayuda, a ver si lo podemos solucionar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Eliminar columnas y mover

Publicado por Neckkito (1104 intervenciones) el 26/07/2013 10:03:54
Hola, Nano:

Hasta donde yo sé, tenemos buenas y malas noticias.

Las buenas es que puedes eliminar el campo que quieras automáticamente de todas las tablas. Eso se haría con el siguiente código:

...
1
2
3
4
5
6
7
8
9
10
Private Sub borroCampoTablas()
    Dim tbl As Object
    Dim miSql As String
    For Each tbl In CurrentData.AllTables
        If Left(tbl.Name, 4) <> "MSys" Then
            miSql = "ALTER TABLE [" & tbl.Name & "] DROP COLUMN VAL"
            CurrentProject.Connection.Execute miSql
        End If
    Next
End Sub

...

Y te sigo recomendando que si ejecutas el código anterior lo hagas sobre una copia de tu BD, por si las moscas.

Las malas noticias es que lo de mover la columna no es posible a través de una SQL. He estado mirando por ahí y te resumo las dos respuestas que creo más representativas (aunque no se refieran estrictamente a Access son perfectamente aplicables):
http://msdn.microsoft.com/es-es/library/aa337556.aspx
http://www.compartir-tecnologias.es/respuesta/t-sql-alter-table-con-posicion-columna-ayuda-208749391.html

Como verás, se hace referencia a un truco para manipular las tablas de sistema, pero en todos los casos no se recomienda. Y yo tampoco te lo recomendaría salvo que quieras jugar con quedarte sin BD.

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar columnas y mover

Publicado por Nano (8 intervenciones) el 26/07/2013 12:14:25
Gracias Neckkito por tu ayuda.

He copiado y pegado tu escrito y me sale como un error en amarillo,
la línea:
CurrentProject.Connection.Execute miSql

de momento ya es una ayuda lo tuyo, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Eliminar columnas y mover

Publicado por Neckkito (1104 intervenciones) el 26/07/2013 12:16:24
¿Qué número de error y descripción te da?
¿Qué versión de Access estás empleando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar columnas y mover

Publicado por Nano (8 intervenciones) el 26/07/2013 13:37:44
Uso Access 2010, y dice:

"Se ha producido el error -2147467259(80004005) en tiempo de ejecución
No se puede ejecutar las instrucciones de definición de datos en orígenes de datos vinculados"

Si le doy a depurar, sale en amarillo la línea:
CurrentProject.Connection.Execute miSql

Con respecto a mover columnas, lo hago manualmente y no hay ningún problema en ello, todo está OK.
Además, son datos simples, sin ningún tipo de formulas o que tengan relación las celdas unas con otras.

Es más, si no es mucho pedir para ti ¿Podrías comprobarlo tu mismo?
Es decir, creas tres tablas por ejemplo, con los campos Val,X,Y,Nombre e intenta que en tus tres tablas haga la función que pido.
Porque luego esa macro se puede exportar e integrarla en mi archivo ¿no?

Muchas Gracias por tu interés.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Eliminar columnas y mover

Publicado por Neckkito (1104 intervenciones) el 26/07/2013 14:00:30
Hola!

Pues las malas noticias son que tienes las tablas vinculadas, y la construcción SQL sólo te permite modificar las tablas si están como tales en la BD (no vinculadas). Para que funcione el código debería ejecutarse en la BD donde están las tablas originales.

En este caso la única solución que le veo, si te es factible y no quieres tocar la BD origen de las tablas, es que no linkes las tablas, sino que te las importes directamente. Así sí te funcionará el código, porque lo acabo de probar en una BD que me acabo de construir y funciona perfectamente.

En conclusión: que si las tablas están vinculadas no se puede hacer (y, si hay manera de hacerlo, no se me ocurre cómo).

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar columnas y mover

Publicado por Nano (1 intervención) el 26/07/2013 15:08:39
Necckito ¡¡ FUNCIONA !!
He rehecho el archivo MDB y funciona la eliminación de la columna.
Te estoy muy agradecido.

¿Hay alguna posibilidad de ajustar lo de mover la columna Nombre al primer lugar?

ahora la tabla se queda X,Y,NOMBRE pero para el programa que tengo que utilizar esa base, el orden de columnas debe ser: NOMBRE, X,Y

Esto marcha Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Eliminar columnas y mover

Publicado por Neckkito (1104 intervenciones) el 26/07/2013 16:25:40
Pues... prueba lo siguiente en una copia de tu BD, pues tengo mis dudas de que te vaya a funcionar, pues es un pequeño apaño...

Haz lo siguiente:

- Créate una tabla en blanco y guárdala como TPlantilla. La estructura de esta tabla tiene que ser los campos con el orden en que los quieres: Nombre, X, Y

- En un módulo inserta este código:

...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Private Sub reconstruyoTablas()
    Dim tbl As Object
    Dim miSql As String
        'Recorro las tablas de la BD
    For Each tbl In CurrentData.AllTables
            'Cojo sólo las que no son de sistema ni TPlantilla
        If tbl.Name <> "TPlantilla" Then
            If Left(tbl.Name, 4) <> "MSys" Then
                    'Borro los datos de TPlantilla
                DoCmd.SetWarnings False
                DoCmd.RunSQL ("DELETE FROM TPlantilla")
                DoCmd.SetWarnings True
                    'Me creo la SQL de anexion de datos
                miSql = "INSERT INTO TPlantilla(Nombre, X, Y)" _
                    & " SELECT [" & tbl.Name & "].Nombre, [" & tbl.Name & "].X, [" _
                    & tbl.Name & "].Y FROM [" & tbl.Name & "]"
                        'Anexo los datos a TPlantilla
                DoCmd.SetWarnings False
                DoCmd.RunSQL (miSql)
                DoCmd.SetWarnings True
                    'Cambio el nombre de TPlantilla
                DoCmd.Rename tbl.Name & "-tmp", acTable, "TPlantilla"
                    'Copio la nueva tabla como plantilla
                DoCmd.CopyObject , "TPlantilla", acTable, tbl.Name & "-tmp"
                    'Borro la tabla original
                DoCmd.DeleteObject acTable, tbl.Name
                    'Vuelvo a dejar el nombre que tenía
                DoCmd.Rename tbl.Name, acTable, tbl.Name & "-tmp"
            End If
        End If
    Next
End Sub

...

Ejecuta el código... y cruza los dedos.

A ver si te funciona.

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar columnas y mover

Publicado por Nano (8 intervenciones) el 26/07/2013 16:52:26
¿Sería crear esa tabla dentro de la misma base de datos que tengo?


Por cierto, he visto esta otra posibilidad, que es intercambiar datos de columnas.

Se podría hacer: Pasar los datos de NAME a la primera columna VAL y después borrar NOMBRE.

Los datos son muy pequeños, entre 1 y 10 filas máximo.

y en todo caso la columna VAL, ponerla con 50 caracteres, ya que la de NOMBRE tendrá eso más o menos y la actual VAL es de solo 10 caracteres.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Eliminar columnas y mover

Publicado por Neckkito (1104 intervenciones) el 26/07/2013 17:02:06
Hola!

Sí, la tabla estaría dentro de la BD con las tablas que quieres cambiar.

Lo que te recomiendo es: copia de tu BD - Prueba a ver si funciona.

Respecto del sistema que propones digamos que son "los mismos perros con distintos collares". Te vuelves a encontrar con el mismo problema saber cómo recorrer todas las tablas y hacer el cambio en cada una de ellas.

Saludos,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar columnas y mover

Publicado por Nano (8 intervenciones) el 26/07/2013 17:28:35
Bueno, pues va funcionando la cosa bastante bien.

Tengo un problemilla que es cuestión de poco, las columnas X Y son valores con decimales.
Por ejemplo : 20.55822 o -2.5855210 y aunque le he dado al campo, valor Numérico y con 6 decimales, no me los separa.
Es cuestión de afinarlo a ver.
Bueno, pues lo he puesto como valor Texto y respeta los decimales

Otra pregunta: ¿Se pueden meter los dos códigos a la vez en la misma macro o módulo?
Tendría que crear antes la TPlantilla.

Y... ¿Se puede tener la tabla TPlantilla exportada para en próximas ediciones con nuevos ficheros,importarla y no tener que volver a crearla? Así la tendría de muestra como las macros


MUCHAS GRACIAS AMIGO
Me has ayudado muchísimo y te lo agradezco

Nano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar columnas y mover

Publicado por Nano (8 intervenciones) el 26/07/2013 18:22:07
Bueno Neckkito, TODO SOLUCIONADO y

He pegado los dos scripts en un módulo, y funciona perfectamente.
Tengo en un archivo separado la TPlantilla , Abro la base de datos MBD, pego la Tplantilla, Abro un módulo, copio el escript, lo ejecuto y Voilá, todo como quiero

Campos, NAME / X / Y

Y ordenados bien perfectamente.

Te doy mil gracias por tu colaboración y paciencia que has tenido, espero que este post pueda ayudar a más gente.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Eliminar columnas y mover

Publicado por Neckkito (1104 intervenciones) el 27/07/2013 09:31:58
Bueno... Ha sido un "hueso un poco duro de roer", pero me alegro muchísimo de que al final te haya funcionado como quieres

Un cordial saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Eliminar columnas y mover

Publicado por Nano (8 intervenciones) el 27/07/2013 16:03:30
Lo cierto que con gente con conocimientos como tú, con paciencia y disponibilidad da gusto entrar por aquí, en algunos otros sitios van de sobrados y de genios arrogantes.
Eres un fenómeno Neckkito.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar