Error en código para duplicar un formulario con su correspondiente subformulario.

Por una necesidad de trabajo cree una pequeña aplicación, y ahora tengo la necesidad para simplificar el trabajo que un formulario con su correspondiente subformulario se dupliquen con un nuevo id.

Tomo un código de la web e intente codificarlo pero no tengo idea de cual es el error por el cual no funciona, si alguien me puede ayudar le estaré muy agradecido.

Les dejo el código.

Private Sub Duplicar_Click()
Dim strSQL As String, _
    lngSiguiente As Long
lngSiguiente = DMax("Codigo_Producto", "TProductos") + 1
strSQL = "INSERT INTO TProductos ( Codigo_Producto, Fecha, Cliente, NombreProducto, DescripcionProducto, ObservacionesProducto, Sub3, Inc1, Inc2, Inc3, Inc11, Inc12, Inc13, PrecioProducto, Leyenda )"
strSQL = strSQL & " SELECT " & lngSiguiente & " , Codigo_Producto, Fecha, Cliente, NombreProducto, DescripcionProducto, ObservacionesProducto, Sub3, Inc1, Inc2, Inc3, Inc11, Inc12, Inc13, PrecioProducto, Leyenda "
strSQL = strSQL & " FROM TProductos"
strSQL = strSQL & " WHERE Codigo_Producto = " & Me.Codigo_Producto
CurrentDb.Execute strSQL, dbFailOnError
StrSQL = "INSERT INTO SFTProductosDetalle ( CodProductoDetalle, CodigoProducto, RecurosTipo, RecursoDesc, Tipo, RecursoNombre, Nombre, Servicios, Costo, Unid, OtrosCostos, Subtot, RentPor, RentPesos )"
strSQL = strSQL & " SELECT " & lngSiguiente & " , CodProductoDetalle, CodigoProducto, RecurosTipo, RecursoDesc, Tipo, RecursoNombre, Nombre, Servicios, Costo, Unid, OtrosCostos, Subtot, RentPor, RentPesos  "
strSQL = strSQL & " FROM SFTProductosDetalle"
strSQL = strSQL & " WHERE Codigo_Producto = " & Me.Codigo_Producto
CurrentDb. Execute strSQL, dbFailOnError
Me. Requery
DoCmd. GoToRecord,, acLast
End Sub

1 Respuesta

Respuesta
2

En el editor de VB donde tienes esa instrucción prueba a pulsar Depuración-Compilar database. Si hubiera algún error te lo marcaría en rojo.

Pero honestamente, a la vista de lo que has puesto estás metiendo en la misma tabla datos que ya están en ella, la verdad no le veo sentido. ¿Has probado a usar

docmd.copy object.... en conjunción con

Docmd. Rename

Gracias por responder, lo que quiero hacer, no fui muy claro es copiar los datos de un registro con un nuevo id. El registro se genera ingresando datos en un formulario y subformulario.

Ahora bien cuando utilizo el código de más arriba se sale el siguiente aviso

Sinceramente la alternativa que me sugieres no se como utilizarla me refiera al :

docmd.copy object.... en conjunción con   ...Docmd. Rename

Vamos a lo primero, cuando se usa la instrucción insert into, da igual como se llamen los campos origen y destino, pero han de ser de datos compatible, es decir, que en un campo numérico, has de meter valores numéricos, en un campo fecha has de meter datos fecha. Por eso, fíjate en lo que tienes puesto

insert into TProductos (codigoProducto, fecha...)

Pero después le estás diciendo que en el campo CodigoProducto inserte el valor lngsiguiente, y que en campo fecha inserte el valor de CodigoProducto(con lo que se produce el error)

Item más, cuenta los campos de la la instrucción insert into y verás que son 14, y luego cuenta los de la instrucción select y verás que son 15.

Cuando quieres copiar un formulario, en el original puedes poner un botón de comando y en sus propiedades-eventos-al hacer clic poner

DoCmd. CopyObject, "Nuevo nombre del formulario", acForm, "nombre viejo del formulario"

Por ejemplo, supón que estás en el formulario Clientes y quieres hacer una copia y llamarlo CopiaClientes, pondrías

Docmd. Copyobject,"CopiaClientes", acform,"Clientes"

La instrucción Docmd. Rename es por si quieres cambiar el nombre de algún objeto(ojo, que no sea el que está abierto en ese momento). Por ejemplo, supòn que estás en el formulario Clientes y quieres cambiarle el nombre al formulario Facturas y dejarlo como CopiaFacturas. Pondrías

DoCmd. Rename "copiafacturas", acForm, "facturas"

¡Gracias! 

Por tu paciencia y por el tiempo que empleaste en explicarme tan detalladamente, pude lograr que funcionara como desea.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas