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

Respuesta

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 tiene Me. Name sobra el espacio, debe ser Me. Name (nombre del formulario activo)

Para Julián González "Es mejor estar callado si no se sabe que decir " ahí se lo demostró enriqueh.

cambia el primero y también cambia la copia, no entiendo porque

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

Le recomiendo la respuesta de enriqueh, imagínese si tuviera que copiar 50 campos, la respuesta que utiliza INSERT INTO es inoperante desde todo punto de vista.

Mi estimado amigo, le envíe un correo a ver si me puede ayudar con ese problema, muchas gracias

Revise su correo le envíe la respuesta

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

Y ese código usted lo pone en algún botón o en la parte de algún formulario???

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.

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

Probé ese código en un botón, realiza el duplicado, pero cambia texto del que se busco y del nuevo

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)

el Me.Name lo debo reemplazar por mi tabla o por algo, porque no funciona, me arroja un error

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


cambia el primero y también cambia la copia, no entiendo porque

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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas