Manipulación de tablas de Access con Visual Basic

Lo que te pregunto lo tienes chupado seguro:
Partiendo de una tabla repleta de datos, tengo que generar un informe
que no consigo mediante una consulta. La solución es muy sencilla,
pues tan solo necesito crear una tabla resultado y buscar en la tabla
de origen aquellos datos que deben quedar reflejados.
Necesito saber:
1/ Cómo accedo a los registros y campos de cada registro de una tabla
existente.
2/ Cómo crear una tabla y acceder a sus campos y registros
Todo esto utilizando Visual Basic para Access.
¿Qué me dices?
Muchas gracias por tu atención,
saludos.

1 respuesta

Respuesta
1
Las consultas al principio son un poco puñeteras, pero acabas comprobando que son de una potencia enorme y que son capaces de hacer con mayor eficacia lo que a ti te hubiera costado un montón de horas de programación.
Para acceder a los campos y registros de una tabla debes dimensionar y abrir sendos objetos Database y Recordset, abrirlos y trabajar con sus propiedades y métodos (entre ellos createtabledef para crear una nueva tabla). Si buscas en la ayuda de Access lo que hay sobre Database, Recordset y Createtabledef, comprobarás que el tema da para un par de manuales y no es cosa de ponerse a escribirlos aquí.
Si quieres trabajar con VB es señal de que tienes conocimientos de programación y entonces no te costará mucho meterte en los objetos de datos, pero seguro que mientras lo consigues vas a conseguir unos resultados mucho mejores a través de consultas.
Conclusión: Plantéame qué es lo que quieres hacer y seguro que con una consulta acabamos mucho antes. (Por cierto, la forma más rápida de crear una nueva tabla es con una consulta de creación de tablas.
Ok, gracias por tu interés,
paso a describirte la cuestión:
En una tabla tengo tantos registros como operaciones se
realizan sobre una pieza en una fábrica. Tiene el siguiente formato
numPieza tipoOperación tiempoInvertido
123 A 15
124 C 2
124 A 120
124 B 65
125 A 13
Como observarás, hay multitud de operaciones (en concreto 15),
que yo he representado aquí con letras.
Una pieza puede precisar una o más de una operación.
Si una pieza precisa varias operaciones, aparecen tantos registros
como operaciones. Todos esos registros comparten el valor del
campo numPieza.
Yo quiero generar un informe en el que los datos me aparezcan
con el siguiente formato:
numPieza operaciónA operaciónB operaciónC
--------- ----------- ----------- ------------
123 15 - -
124 120 65 2
125 13 - -
He intentado hacerlo con una consulta pero no he sido
capaz. Supongo que para alguien experto es una parida,
pero soy nuevo en Access y no lo he visto inmediato.
Tengo práctica en Java, por lo que pensé que si era
capaz de acceder a los objetos tabla podría hacerlo con
un pequeño pedazo de código.
Una vez más, gracias por tu interés.
El tipo de consulta que necesitas es una "Consulta de Referencias Cruzadas". Quizás el tipo de consulta más difícil de entender; sin embargo tu caso es muy sencillo y no vas a encontrar dificultad.
Vete a consultas y en el Menú Consulta, elige consulta de referencias cruzadas. Aparece una fila más en la que pone Tab Ref Cruz. En esa fila eliges encabezado de fila para la pieza, encabezado de columna para la operación y valor para tiempo. En la fila totales eliges respectivamente Agrupar por, Agrupar por y Suma.
Con eso la consulta está creada, pero queda un inconveniente: el número de columnas es variable (si no existen valores para una operación, no existe la columna correspondiente) y esto es un serio inconveniente para elaborar el informe. Para solucionarlo, debemos crear encabezados fijos: En la parte gráfica de la consulta, pulsa con el BOTÓN DERECHO del ratón en el espacio donde no hya una tabla y elige la opción "Propiedades". Entre las propiedades elige "Encabezados de Columna" y ahí pones los nombres de los campos separados por puntos y coma.
Yo he hecho una prueba que te puede valer si sustituyes los nombres de campos y de la tabla (Pruebas) por los correctos y luego copias y pegas a sección SQL del generador de consultas. Fíjate el código SQL que requiere y luego imagina lo que sería hacer lo mismo utilizando objetos de datos en VBA:
TRANSFORM Sum(Pruebas. Tiempo) AS SumaDeTiempo
SELECT Pruebas.Pieza
FROM Pruebas
GROUP BY Pruebas.Pieza
PIVOT Pruebas.Operación In ("A","B","C");
Sencillamente excelente.
Me has proporcionado ua solución, y además
me has mostrado que las consultas son lo primero
que hay que explorar antes de complicarse la existencia
con código.
Muchísimas Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas