Leer Base de Datos de Access con VBA

Respuesta de
a
Usuario
Hola Experto, te molesto por lo siguiente: Estoy creando una aplicación en VBA que me permita comparar unos datos de una tabla de access, para discriminar cual es el mayor y aplicar un criterio de borrado, pero no se como leer los datos de dicha tabla (por ejemplo una columna en particular) y guardar dichos datos en una matriz de manera de poder manipularla. Una vez leído dichos datos y corregido lo que haya que corregir, poder reescribir dicha tabla de access o en su defecto crear una nueva. Te estaría enormemente agradecido porque me he leído cuanto manual he podido y sigo sin resolver este problema. De antemano gracias.
Avatar
Experto
Te doy una idea
Supongamos que tienes la tabla empleados donde tiene un indice (campo indexado) que se llama ID
entonces quieres leer los datos del empleado ID=3 por ej seria más o menos así
en el procedimiento que elijas :
--------------------------------------------------------------------------------
Private sub verdatosempleados ()
dim db as database
dim registro as recordset
set db= currentdb
set registro= openrecordset("empleados")      'abro la tabla empleados
registro.index="ID"
registro.seek "=", 3       ' se posiciona en el registro 3 para leer o escribir
me.xxxxxx= registro.nombre  ' guardo el nombre en el cuadro xxxxxx de un formulario
registro.edit     ' cambio el nombre  del empleado 3  en la tabla
registro![nombre]= "MArcelo"
registro.update  'actualizo la tabla
registro.close  ' cierro la tabla
End sub
----------------------------------------------------------------------------------------------------------
Básicamente con esto te posicionas en cualquier tabla para leer o escribir, la tabla siempre debe tener al menos un índice ( seek no funciona sino es con un indice)
El nombre del índice debe coincidir con lo que pones en el .index="nombre del indice"
En la vista de diseño de la tabla presionando indices puedes ver bien que nombre tiene porque a veces el nombre del campo no coincide con el nombre del indice entonces no funcionará.
Cuéntame de donde eres y como te resultó
saludos
Usuario
Augusto: El código no me funcionó, en la linea Set registro = Openrecordset("PVI"), lo que está en negrita me arrojó "Error de compilación: No se ha definido Sub o Function" y lo escribí tal cual como lo sugeriste. Lo que no entendí del código es que quisiste decir a partir de la línea me. xxxxx = registro. ¿Nombre (ahí modificabas las celdas de las tablas?) Lo otro que te quería preguntar es como trabajar con más de una tabla (que las genero con consultas) dentro de la misma base de datos y si para recorrer dichas tablas se hacen con ciclos o no y como sería eso en código. Me llamo Ricardo y soy de Talca-Chile y te agradezco de antemano tu paciencia para tratar de ayudarme. Saludos.
 
Avatar
Experto
Si disculpa, la instrucción es db.openrecordset("nombre de la tabla")
me.xxxxx = registro.nombre   se refiere a un control de un formulario(tipo cuadro texto por ej)  en el caso de que quieras asignarle un valor al control  a partir de un dato de esa tabla donde estas leyendo
con el mismo  procedimiento puedes abrir tablas o consultas
db.openrecordset("nombre de consulta o de tabla")
recorrer una tabla o consulta :
while not registro.EOF  ' mientras no sea el final de la tabla o consulta
... instrucciones
...
    registro.movenext
wend ' fin del bucle
Este seria solo un método de recorrer todos los registros con un bucle
si necesitas abrir varias tablas o consultas, en la cabecera del procedimiento haces todo lo que te expliqué en el primer mail
...
dim tb1 ,cs1, cs2 as recordset
despues de    set db= currentdb pones
 set  tb1= db.openrecordset("tabla1")
set cs1=db.openrecordset("consulta1")
set cs2= db.openrecordset ("consulta2")
No olvides cerrar las tablas y consultas al salir del procedimiento
tb1.close
cs1.close
cs2.close
...
Al abrir una tabla o consulta el puntero siempre se posiciona en el primer registro
Amigo yo puedo realizarte un proyecto a código abierto de lo que necesites y no cobro caro dependiendo de lo que se trate y el tiempo que lleve . Con ésto podrás aprovechar el código para otras aplicaciones y también aprender del mismo
A tus órdenes, saludos
Usuario
Muchas gracias, sobre la asesoría que me ofreciste, tuviera más tiempo quizá te la hubiera pedido, pero creo que todo debería funcionar bien y cualquier duda, te volveré a contactar, máxima calificación por la excelente ayuda y todo eso. Saludos.