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
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
- Compartir respuesta