Access: dudas con los formularios

Como en el lenguaje de visual puedo llamar a una tabla desde un formulario por ejemplo llamada pensinados y que de la columna rut lo busque y muestre el nombre... Otra pregunta es como puedo hacer para que se incremente en un foemulario el ultimo mayor ingresado en la tabla

1 respuesta

Respuesta
1
Aúpa,
Para dar respuesta a las preguntas que me planteas, voy a utilizar objetos DAO. Para que funcionen en tu Base de Datos, asegúrate de que tienes activada la referencia a este tipo de Objetos.
Las referencias se establecen en el cuadro de diálogo Referencias, disponible haciendo clic en Referencias en el menú Herramientas mientras estás en la vista Diseño de un módulo. La Biblioteca de compatibilidad que debes tener activada es: DAO 2.5/3.5 de Microsoft
Bien, aclarados estos previos, vamos con tus preguntas:
1. Cómo acceder a una tabla " pensinados" desde Visual Basic
Para acceder a una tabla (o consulta) desde Visual Basic, debes utilizar un RecordSet (Conjunto de Registros). Un RecordSet obtiene los registros que se le indican de un origen de datos y los guarda en memoria como si se tratase de una tabla más de Access con la que podemos hacer las mismas operaciones de agregar, eliminar, modificar.
Un RecordSet siempre hay que crearlo desde un Objeto DataBase (Base de Datos)
En tu caso, para acceder a la tabla "pensinados" habría que introducir las siguientes líneas de código el Visual Basic:
Dim bdActual as DataBase 'Definimos el objeto DataBase
Dim rsPensinados as RecordSet 'Definimos el objeto RecordSet
'Ahora asignamos a bdActual la Base de datos que tenemos abierta
set bdActual = CurrentDB
'Creamos el RecordSet a partir de la tabla pensinados
set rsPensinados = bdActual.OpenRecordSet ("pensinados", dbOpenDynaSet)
'Como ves, lo creamos con el método OpenRecordSet, cuyos parámetros te recomiendo mirar en la ayuda de Access para más información. El RecordSet sólo hay que crearlo una vez, después podemos hacer con él todas las operaciones que queramos.
'Con esto ya tenemos la tabla en memoria. Si quieres obtener el campo "rut" del primer registro, bastaría con hacer lo siguiente
MiVariable = rsPensinados![rut]
Ahora bien, si quieres localizar un registro concreto en la tabla, puedes utilizar el método FindFirst del objeto RecordSet (en la ayuda encontrarás una descripción completa de sus posibilidades)
Por ejemplo:
Supón que queremos localizar le primer registro de la tabla "pensinados" cuyo campo "rut" contiene un valor guardado en la variable MiVar. El código Visual Basic sería:
Dim bdActual as DataBase 'Definimos el objeto DataBase
Dim rsPensinados as RecordSet 'Definimos el objeto RecordSet
'Ahora asignamos a bdActual la Base de datos que tenemos abierta
set bdActual = CurrentDB
'Creamos el RecorSet a partir de la tabla pensinados
set rsPensinados = bdActual.OpenRecordSet ("pensinados", dbOpenDynaSet)
'Localizamos el registro que buscamos (suponiendo que el campo rut es de tipo texto)
rsPensinados.FindFirst "[rut]='" & MiVar & "'"
'Fíjate que si rut fuese de otro tipo diferente de texto, bastaría con poner "[rut]=" & MiVar
'Ahora comprobamos si ha encontrado el registro:
If rst.NoMatch Then
MsgBox "No se ha encontrado ningún registro."
Else
MsgBox "Registro Encontrado."
End If
'Por último, cerramos el RecordSet para liberar la memoria si ya no lo vamos a utilizar más.
rsPensinados.Close
'También podemos cerrar el objeto DataBase
bdActual.close
Los RecordSets ofrecen un montón de posibilidades realmente interesantes. Te animo a que vayas probando y descubriéndolas.
Vamos con la segunda pregunta.
2. Incrementar un campo.
La verdad es que no sé muy bien que registro quieres incrementar exactamente, si el último de la tabla, o el que tiene mayor valor en un campo dado. Voy a tratar de responder a las dos posibilidades.
Además ahora que ya conocemos los RecordSets, puede ser un buen ejercicio para practicar con ellos:
a) Cómo incrementar el valor de un campo del último registro insertado en una tabla:
Dim bdActual as DataBase
Dim rsTabla as RecordSet
set bdActual = CurrentDB
set rsTabla = bdActual.OpenRecordSet ("Nombre de la tabla que quieres abrir ", dbOpenDynaSet)
'Este método obtiene el último registro del RecordSet según el orden que este tenga establecido
rsTabla.MoveLast
'Modificamos el campo Campo1, incrementando su valor en 1
'Activamos el modo de Edición en el RecordSet
rsTabla.Edit
'Modificamos el campo Campo1 de la Tabla
rsTabla![Campo1]= rsTabla![Campo1] +1
'Actualizamos el RecordSet
rsTabla.Update
'Cerramos el RecordSet y el Objeto DataBase
rsTabla.Close
bdActual.Close
b) Cómo incrementar el valor de un campo del registro con mayor valor
Vamos a suponer que tenemos una tabla Tabla1, con un Campo Campo1 de tipo numérico Entero.
Si hiciéramos una consulta para obtener el elemento de mayor valor en el campo1, el código SQL de la consulta sería:
SELECT Max(Tabla1.Campo1) AS MáxDeCampo1 FROM Tabla1;
Bien, pues podemos crear un RecordSet que directamente nos obtenga el mismo elemento que la consulta. Basta con poner, en lugar del nombre de la tabla en el RecordSet, el código SQL de la Consulta. El código sería:
Dim bdActual as DataBase
Dim rsTabla as RecordSet
set bdActual = CurrentDB
set rsTabla = bdActual.OpenRecordSet ("SELECT Max(Tabla1.Campo1) AS MáxDeCampo1 FROM Tabla1;", dbOpenDynaSet)
'Modificamos el campo Campo1, incrementando su valor en 1
'Activamos el modo de Edición en el RecordSet
rsTabla.Edit
'Modificamos el campo Campo1 de la Tabla
rsTabla![MáxDeCampo1]= rsTabla![MáxDeCampo1] +1
'Actualizamos el RecordSet
rsTabla.Update
'Cerramos el RecordSet y el Objeto DataBase
rsTabla.Close
bdActual.Close
Espero que esto te haya servido. Si tienes cualquier duda o pega con las soluciones que te propongo, no dudes en consultármelo.
Un abrazo,
Javi

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas