Como buscar y crear nuevo registro en access
Quiero buscar un registro en access y una vez encontrado ese registro modificarlo pero que se añada como un registro nuevo pero que no cambie al registro anterior, y lo e intentado pero modifica el registro anterior y el nuevo registro.
3 respuestas
Se puede hacer pero con código VBA.
1. En este caso debe mostrar el registro encontrado en un formulario independiente
2. Verificar si los datos han cambiado, en caso afirmativo mediante una instrucción SQL debe adicionar el registro, previa validación de los datos.
No lo puede hacer en un formulario dependiente porque al modificar la información Access va a registrar automáticamente los cambios.
Sin ofender estoy de acuerdo la respuesta que dan es válida para formularios dependientes ¿Se cumple para formularios independientes?. Claro que están preguntando para formularios dependientes.
Esta forma de trabajar en un entorno multiusuario es un fracaso le recomiendo tener cuidado, toda vez que se está dando por aceptado el cambio sin preguntar si los datos son correctos y además puede darse el caso que más de un usuario tengan en uso el mismo registro, acá es donde Access le dice "Otro usuario ha modificado el registro ..."
Esto para Julián González no es necesario decir "Es mejor estar callado si no se sabe que decir", basta con decir, otra o mejor solución xxxxxx. Por que si vamos estar callados si hay muchas en que usted ha debido abstenerse de opinar.
Excelente el código de enriqueh Feijoo no lo conocía, lo probé y funciona muy bien, solo adicionaría validar que no estemos en un nuevo registro, para evitar error. Algo como
If Me.NewRecord = False Then DoCmd. RunCommand acCmdSelectRecord DoCmd. RunCommand acCmdCopy DoCmd. GoToRecord acActiveDataObject, Me. Name, acNewRec DoCmd. RunCommand acCmdPaste End If
Aunque sigue siendo valido solo para formularios independientes pero es excelente.
El Me.Name lo reemplazo por algo, porque a mi no me funciona el botón, lo que hace es modificarme el dato
Tal vez enriqueh le dé la solución, es el autor del código o si quiere envíeme su base de datos a [email protected] y la reviso a ver si doy con el problema
- Compartir respuesta
Es mejor estar callado si no se sabe que decir. Si tengo el formulario Clientes que DEPENDE de la tabla Clientes, donde tengo un combinado para elegir un cliente en particular
Voy a elegir Around the Horn, en el momento que lo selecciono
Voy a cambiarle varios controles
Si ahora cierro el formulario( digo esto porque no sé que es lo que vas a hacer luego), me deja la tabla como
Arriba, sin modificar el "original", abajo el nuevo, con los datos que le cambié.
Repito que no sé lo que vas a hacer una vez cambiado los datos. En las propiedades del formulario, en Eventos-Antes de actualizar le tengo puesto
Private Sub Form_BeforeUpdate(Cancel As Integer) DoCmd.SetWarnings False DoCmd. RunSQL "insert into clientes(cliente, nombrecontacto, cargocontacto, ciudad, pais)values(cliente, nombrecontacto, cargocontacto, ciudad, pais)" DoCmd. RunCommand acCmdUndo End Sub
Como te decía, en vista diseño del formulario, haces clic donde señala la flecha de la izquierda para seleccionar el formulario. Luego haces clic donde señala la flecha de la derecha para que se abra las propiedades del formulario.
Luego te vas a la solapa Eventos y haces clic en el rectángulo blanco a la derecha de Antes de actualizar, de forma que te aparezca el "botoncito" con una punta de flecha hacia abajo. Haces clic en él y te aparecerá Procedimiento de Evento. Lo seleccionas y haces clic en el botón de los tres puntos de la derecha
Y eso te lleva al editor de VB y verás que te aparece lo de
Private Sub....
End Sub
Pues en medio tienes que poner lo de
Docmd. Setwarnings
Docmd.runsql"...
Docmd.runcommand...
De todas formas, si quieres, repito, si quieres, mándame un mensaje (sólo el mensaje) a [email protected] y te mando un ejemplo, que quizá sea como se verá mejor.
Si lo haces, en el asunto del mensaje pon tu alias Mati Cisternas, ya que si no sé quien me escribe ni los abro.
- Compartir respuesta
Un método mas para copiar un registro.
Se parte del supuesto que el formulario tiene un origen de datos, crea una copia fiel al final del conjunto y en modo edición para poder modificar el registro antes de guardarlo (o duplicar si las reglas de la tabla lo consienten).
Un botón con el siguiente código:
Private Sub Comando22_Click() DoCmd. RunCommand acCmdSelectRecord DoCmd. RunCommand acCmdCopy DoCmd. GoToRecord acActiveDataObject, Me. Name, acNewRec DoCmd. RunCommand acCmdPaste End Sub
El orden correcto es:
A: Se crea la copia
B: Se modifica a placer
C: Se guarda
Me extraña que funcionen 'síncronos' (el origina no se modifica)
Me. Name devuelve el nombre del formulario y es uno de los parámetros.
Por simple curiosidad:
Al utilizar la ventana para trascribir código (que debería ser totalmente fiel) aprecio que añade un espacio tras el punto ¿se ve así o solo lo aprecio yo?
DoCmd. RunCommand acCmdSelectRecord
DoCmd. RunCommand acCmdCopy
DoCmd. GoToRecord acActiveDataObject, Me. Name, acNewRec
DoCmd. RunCommand acCmdPaste
En mi opinión si algo no se puede hacer, para que continuar, la primera línea la escribiría así:
IF Me.NewRecord Then Exit Sub
Aclaremos un punto en base a este comentario:
Cambia el primero y también cambia la copia, no entiendo porque
No es lo mismo copiar el registro y modificar la copia, que modificar el registro, copiarlo y deshacer los cambios efectuados en el original.
No es mi método trastear con los datos originales, trasteo con los que estoy creando, por eso la secuencia se inicia seleccionado un registro, tras ello se copia, (al copiarlo se desplaza al recién insertado) es el registro copiado el que se modifica, tras ello se guarda.
- Compartir respuesta