Escribir registro de tabla desde form.

Te quería preguntar como se puede escribir datos en un campo de una tabla con código, desde un formulario, que no sea el form. Asociada a la tabla y pasar al siguiente registro de la tabla, para seguir escribiendo otro valor.

1 respuesta

Respuesta
1
Para escribir en una tabla desde cualquier formulario, lo mejor es hacerlo, bien ejecutando cadenas de Insert Into de SQL o bien con un obeto Recordset (de ADO o DAO) y sus métodos AddNew y Update.
Para moverte al siguiente registro, tienes los métodos AddNew (que se posiciona en un nuevo registro) y los métodos MoveNext, MoveLast (para avanzar) o MovePrevious, MoveFirst para retroceder en la tabla de los objetos RecordSet de ADO y DAO
Piensa que el siguiente "código" ha de ser desencadenado por algún evento, el que quieras, pero procura tenerlo controlado para que no se vayan insertando o actualizando registros a lo loco sin que sea tu deseo.
Supongamos que tienes un formulario (frm1) con tres cuadros de texto (txt1, txt2 y txt3) y quieres guardar los datos en la tabla1 en los campos c1, c2 y c3.
Lo primero es abrir la tabla (el conjunto de los datos de la tabla, para ser más exactos), para ello creamos el objeto recordset (te lo comento den DAO porque es lo que usa la mayoría de la gente, yo personalmente prefiero ADO por la rapidez y la claridad, pero bueno)
Dim rs as dao.recordset
set rs=CurrentDB.OpenRecordset("Tabla1")
with rs
.addnew
![c1]=frm1.txt1
![c2]=frm1.txt2
![c3]=frm1.txt3
.update
end with
Ahora, si lo que quieres es añadir un nuevo registro, simplemente tienes que repetir el código anterior (más bien, repetir la llamada al código anterior). Si lo que quieres es moverte al siquiete registro, simplemente:
if not rs.eof ' esto comprueba que no estamos en el final de la tabla
rs.movenext
else
rs.movelast
end if
La diferencia entre movenext y movelast radica en que movenext "espera" la existencia de un "siguiente" registro y, si no lo hay, genera un error. MoveLast simplemente se posiciona en el final del conjunto de registros.
Ahora bien, si estás llamando a este código desde un formulario distinto de frm1 y estás trabajando con VBA en Access, lo más probable es que esto te generase un error: Access requiere posicionar el Foco (SetFocus) sobre los controles de los que quieres obtener datos (en este caso txt1, 2 y 3) y si estás llamando a este procedimiento desde otro formulario distinto, o éste pierde el foco para dárselo a aquel, o se generaría el error que te comento.
Lo más efectivo sería llamar al procedimiento desde el mismo formulario del que quieres obtener los datos, pero, una opción b) sería que este código, por ejemplo, se ejecutase al descargar el formulario que lo llama y tener establecido el foco a frm1 cuando el otro se haya descargado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas