Traspasar los Valores de un Subformulario en una función en VB

A tod@s

Tengo que recoger dentro de un "Procedimiento Evento".... "Al hacer Click" en un formulario el valor que hay en un campo de texto: (Texto14) que esta en el subformulario: (LÍNEAS APUNTES) dentro de ese mismo formulario. El campo receptor es un campo tipo fecha: NFecha

Todo esto esta dentro de un For ... Next, que va recogiendo los valores tipo Fecha(Texto14) que van cambiando a través del ciclo y son insertados en una tabla a través de INSERT INTO

No se como hacerlo me da error haciendo alguna de las dos formas:

Me.NFecha = DMax("Texto14", "LINEAS APUNTES")

Me.NFecha=[LINEAS APUNTES]!Texto14

1 respuesta

Respuesta
1

La explicación que das es un tanto confusa, pero en general, para hacer referencia a un control de un subformulario, has de usar esta sintaxis, si estás en el formulario principal:

Me.NombreControlSubformulario.Form.NombreControl

lo que en tu caso sería:

Me.NFecha=Me.[LÍNEAS APUNTES].Form.Texto14

En este enlace tienes toda la casuística que se te puede dar: http://www.llodax.com/Tutoriales/SintaxisSubForms.htm

Hola.

Mira esta es la instrucción que estoy metiendo en un INSERT INTO donde recojo directamente el valor de un campo después de hacer una inserción y no se como he de hacerlo para poderlo hacer funcionar.

Es un ciclo que calcula los vencimientos a través del numero de plazos que deseen

Por cada inserción que hay en la tabla el campo de texto hace este proceso de recoger un mes más para el próximo vcto.

Text14 = AgregFecha("m";1;[FechaPago])

Este campo esta en el subformulario: LINEASAPUNTESCOMPRASGASTOS

Todo esto esta dentro de un for ... next y el campo Text14 cambia de valor con un mes más cada vez que es insertado un nuevo asiento.

For b= 1 To Plazos 

CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Me.[LINEASAPUNTESCOMPRASGASTOS].Texto14 & "#,'" & Me.Importe & "')"

next b

Intento que recoja directamente el valor del campo texto14, que esta dentro del SubFormulario LINEASAPUNTESCOMPRASGASTOS,

No consigo poder dar la sintaxis correcta a la instrucción, he quitado el format delante de la fecha por si era esto el error que me producía pero no se ya como hacerlo.

Muchas gracias por tu ayuda y un saludo

Así te tendría que funcionar, suponiendo que los nombres sean los correctos:

CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Me.[LINEASAPUNTESCOMPRASGASTOS].Form.Texto14 & "#,'" & Me.Importe & "')"

Si tienes problemas con el formato de fecha de Texto14, has de cambiárselo con la función Format.

Hola, ¿cómo estas?

He ampliado la Instrucción con FORMAT, de esta manera porque me daba error, y tanto en la modificación que me habías indicado como de esta manera:

CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Format(Me.[LINEASAPUNTESCOMPRASGASTOS].Form.Texto14, "mm/dd/yyyy") & "#,'" & Me.Importe & "')"

En las dos maneras me da este error de ejecución:

Se ha producido el error ‘error 3075’ en tiempo de ejecución:

Error de sintaxis en la fecha en la expresión de consulta “#”

¿A qué crees que puede deberse esto?, porque los nombres son correctos y parce ser que en problema radica en la fecha.

Un saludo

Prueba poniendo así el formato:

Format(.....,"dd/mm/yyyy")

Además, comprueba que efectivamente el valor de Texto14 es una fecha (si no lo es puedes convertirlo con la función CDate)

Me sigue dando el mismo error y texto14 tiene el valor correcto porque el primer vencimiento lo inserta perfectamente a través de otro insert into inicial y visualizo el valor que tiene preparado para la nueva inserción ya dentro de for ... Next.  Siempre me da el mismo error con y sin el formar y es al tomar el valor de texto14.

La primera insercion la hace desde una fecha inicial y después ha de tomar las nuevas fechas calculadas en texto14 que son correctas porque las visualizo.

Pues no le veo ningún error de sintaxis a la SQL...

Como por probar cosas no pierdes nada, comprueba que el código te coje el valor de Texto14, haciendo estos cambios al código (luego lo dejarás como lo tienes):

For b=1 To Plazos

Msgbox Me.[LINEASAPUNTESCOMPRASGASTOS].Form.Texto14

'CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Format(Me.[LINEASAPUNTESCOMPRASGASTOS].Form.Texto14, "mm/dd/yyyy") & "#,'" & Me.Importe & "')"

Next b

Fíjate que comenté la linea del Insert into. De esta forma, para cada repetición del bucle te tendría que salir un mensaje con la fecha de texto14.

Si lo que te sale en el mensaje no es correcto, el error está en la llamada a Texto14, que no es la correcta (seguramente en nombre del control del subformulario no sea el que pones)

Si lo del mensaje es correcto, tendría que ver cómo tienes montada la BD para intentar dar con el problema.

Hola como estas.. Disculpa de no haberte contestado antes..llevo desde el lunes pasado ingresado en el hospital y aun creo que me quedan algunos días mas. Apenas salga probare todo lo que me has indicado y te contestare dándote el resultado de todo lo que me has ducho que probase muchas gracias por tu ayuda.

Ya me dirás, sin prisa, que estos días estoy de viaje, y tengo poco tiempo para dedicarle al foro. Mejórate, que es lo importante.

Hola de nuevo, ya por fin en casa y con necesidad de acabar este proceso.

He seguido tus instrucciones y en problema que he notado es que el campo del subformulario Texto14 no es incrementado correctamente.

En la primera insercion fuera del bucle me recoge bien el valor para el siguiente vencimiento pero ya dentro del bucle siempre tiene el mismo valor, o sea que por cada insercion no me incrementa en un mes el periodo para el siguiente vencimiento.

Esto es lo que tengo puesto hasta ahora por ver si se me resfrescaba el valor del Texto14 que es qeu tiene el calculo del mes siguiente.

Private Sub VENCIMIENTOS_Click()
'Primer Vencimiento'
CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Format(FInicial, "mm/dd/yyyy") & "#,'" & Me.Importe & "')"
DoCmd.RunCommand acCmdRefresh
'Insercion Lineas Vencimientos'
For b = 1 To Plazos - 1
MsgBox Me.[LINEASAPUNTESCOMPRASGASTOS].Form.Texto14
CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Format(Me.[LINEASAPUNTESCOMPRASGASTOS].Form.Texto14, "mm/dd/yyyy") & "#,'" & Me.Importe & "')"
'Refrescar datos'
DoCmd.RunCommand acCmdRefresh
Next b
End Sub

He pensado tambien el realizar el incremento del mes dentro del bucle pero me da error de sintaxis

Intento  meter esta instruccion dentro del bucle despues de cada insercion

Me.texto14=AgregFecha("m";1;[FechaPago])

Si necesitas mas informacion dimelo y te la mando

Gracias poor tu amable atencion. Un saludo

Bufff...

A ver así si te va:

Private Sub VENCIMIENTOS_Click()
'Primer Vencimiento'
CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Format(FInicial, "mm/dd/yyyy") & "#,'" & Me.Importe & "')"
'Insercion Lineas Vencimientos'
For b = 1 To Plazos - 1
CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Format(DateAdd("m", b ,Me.[FechaPago]), "mm/dd/yyyy") & "#,'" & Me.Importe & "')"
Next b
End Sub

Fíjate que en cada pasada del bucle incremento la fecha inicial (FechaPago) en función del contador (b)

Tambien verás que no hago referencia a Texto14, pues creo que el error está ahí, pero como imagino que es un cuadro de texto independiente, podrías incluso quitarlo de tu formulario.

A ver si vamos acertando, si no, pásame una copia de tu BD, sólo con las tablas y formularios que intervienen en tu consulta (y aquellos otros que pudieran ser necesarios para que funcione), con un par de registros inventados.

Hola de nuevo.

He copiado tus datos y me da el error:

Error 3075 en tiempo de ejecución

Error de sintaxis en la fecha en la expresión de consulta '#'

En este insert:

CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Format(DateAdd("m", b, Me.[FechaPago]), "mm/dd/yyyy") & "#,'" & Me.Importe & "')"

Un saludo

La SQL es correcta, revisa que FechaPago sea el nombre correcto para coger la fecha inicial, porque no se si está en el subformulario o en el formulairo principal

Campos tabla: (V) LÍNEAS APUNTES COMPRAS Y GASTOS

FechaPago ---> Campo que recoge el vencimiento y esta en la tabla en el subformulario.

ImportePago ---> Importes por cada vencimiento

Campos TexBox en el Formulario

FInicial --> Es el primer vencimiento a insertar

Importe --> Importe por cada vencimiento

Plazos ---> Numero de Vencimientos a crear

estos son los campos de trabajo. Hay otros que no afectan al proceso de la insercion el For ... next

La primera inserción en la tablas la hace perfectamente, me da el error a partir de la primer inserción del bucle.

Un saludo

Cambia FechaPago por FInical en la SQL:

Private Sub VENCIMIENTOS_Click()
'Primer Vencimiento'
CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Format(FInicial, "mm/dd/yyyy") & "#,'" & Me.Importe & "')"
'Insercion Lineas Vencimientos'
For b = 1 To Plazos - 1
CurrentDb.Execute "INSERT INTO  [(V) LINEAS APUNTES COMPRAS Y GASTOS] (IdApunte,FechaPago,ImportePago) VALUES ('" & Me.IdApunte & "',#" & Format(DateAdd("m", b ,FInicial), "mm/dd/yyyy") & "#,'" & Me.Importe & "')"
Next b
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas