Access: Problemas con consulta datos anexados

Tengo problemas para diseñar una consulta de datos anexados. La consulta debe tomar tres datos de un formulario (Formulario Ventas-Ingresos), Año_Factura, SerieFactura y N_Factura, y otros campos debe calcularlos.

El problema lo tengo al tomar los datos del formulario, y creo que es porque no toma correctamente el tipo de dato que es. Estos datos los toma de tres controles independientes.

Al previsualizar la consulta en el campo Año_Factura (debería tomar el valor 2016) pone 340528115869096,54 €, en el campo SerieFactura (debería tomar el valor 01) pone 48) y en el campo N_Factura (debería poner 5) pone un símbolo raro.

Estos valores los quiero anexar a una tabla denominada Vencimientos en los campos Año_Factura, Serie_Factura (ambos tipo texto), y en Id_Factura (tipo número).

¿Alguna sugerencia?.

1 Respuesta

Respuesta
1

Jon: Lo primero es repasar que los datos sean los adecuados.

A partir de ahí, la estructura de una Consulta de Anexar datos partiendo de un Formulario es así.

Dim StrSQL As String
StrSQL = "INSERT INTO  TuTabla (CampoTipoNumero, Texto1, Texto2, ......, .....) "
StrSQL =  StrSQL  & " VALUES( " & Me.NombreCampo & ", '" & Me.Texto1 & "', '" & Me.Texto2 & "', '" & Me.*** & "', '" & Me.*** & "' )"
CurrentDB. Execute StrSQL

Entre lo que has de repasar, incluye los Formatos de los Controles. Esposible que Año:¿Factura lo tengas como "Moneda" y los otro?. Mis saludos >> Jacinto

El problema es que toma los datos de un cuadro de texto independiente y he comprobado en propiedades del cuadro q el formato lo tengo vacío, es decir sin especificar, pero no me permite poner texto. Si que tengo la posibilidad de fijar el formato como fecha, número, moneda... Pero no me permite especificar  texto, y no se porque

¿Quizás se debe a que el valor de ese cuadro independiente lo calculo con año de una fecha? ¿Igual debería pasarlo a texto antes? ¿Cómo podría hacerlo?

Jon: No has de pasarlo a Texto y debería de darte el valor adecuado.

Si quieres poner aquí la SQl que utilizas y las Formulas previas a elle con los Nombres, ayudaría bastante. De otro modo me temo que alargaremos mucho el tema aventurando por mi parte soluciones con un alto riesgo de no acertar. Mis saludos >> Jacinto

He ido haciendo modificaciones y en parte lo tengo resuelto, salvo en la parte de la función DateAdd. El código que he puesto es el siguiente:

DoCmd.RunSQL "INSERT INTO Vencimientos_Factura_Emitidas (Fecha_Vencimiento, Importe_Vencimiento, Año_Factura, Serie_Factura, Id_Factura ) SELECT DateAdd(m,[plazo],[Forms]![Formulario Ventas-Ingresos]![Fecha_Factura]) AS Fecha_Vencimiento, [Forms]![Formulario Ventas-Ingresos]![Total_Factura]*[Cuantia] AS Importe_Vencimiento, [Forms]![Formulario Ventas-Ingresos]![Año_Factura] AS Año, [Forms]![Formulario Ventas-Ingresos]![SerieFactura] AS Serie, N_Factura AS Id_Factura FROM Vencimientos_Forma_Pago WHERE (((Vencimientos_Forma_Pago.Id_Forma_Pago)=[Forms]![Formulario Ventas-Ingresos]![Forma de pago]));"

Como comentaba, todo funciona bien, excepto el tramo:

DateAdd(m,[plazo],[Forms]![Formulario Ventas-Ingresos]![Fecha_Factura])

Según lo que he leído, debo poner "m" (entre comillas), pero me indica "error de compilación, se esperaba: fin de la instrucción"

Si lo pongo con comillas simples 'm', no me funciona.

Y si lo pongo sin comillas, como lo he puesto, me sale un cuadro de texto pidiéndome el valor "m", le respondo m y todo funciona bien. Por eso se que el resto es correcto...

He probado a crear una variable string Mi_Plazo_Pago y ponerlo en lugar de "m",

Dim Mi_Plazo_Pago as string

Mi_Plazo_PAgo="m"

DateAdd('Mi_Plazo_Pago',[plazo],[Forms]![Formulario Ventas-Ingresos]![Fecha_Factura])

pero sigo igual, o no me lo calcula o si le quito las comillas me pide el valor y entonces si que funciona.

Jon: Solo prueba con 'm' entre comillas simples y me comentas.

Mis saludos >> Jacinto

Si lo pongo con comillas simples, 'm', no me calcula el campo Fecha_Vencimiento, me lo deja en blanco

Jon: Aparte de lo que te he comentado en una primera ojeada, reparo ahora en que tienes todos los datos en un formulario, con lo cual te remito a mi primera contestación con VALUES en lugar de SELECT. Mis saludos >> Jacinto

Jon: Se me olvidaba comentarte que si tienes dificultades con el DateAdd dentro de la Consulta, un modo simple es que la calcules en el propio Formulario y la captures.

La forma de capturar una Fecha es :

, " & "#" & Format(Me.Plazo, "dd/mm/yyyy") & "#" & ",

Mis saludos >> Jacinto

Lo q me comentas de VALUE, creo q no me valdrá, ya que el valor [plazo] no lo toma del formulario, sino de la tabla Vencimientos_Forma_Pago, que además puede tomar varios valores. Una misma factura puede dividirse en uno, dos o tres vencimientos.

para que me entiendas, en el formulario Formulario Ventas-Ingresos, elijo en un combinado independiente la serie de factura. En otro el cliente y en otro introduzco la fecha de factura. Una vez metidos estos datos, me calcula el año factura y el número que corresponde a la factura. En un subformulario me muestra todos los albaranes pendientes de facturar para es cliente. Selecciono los que quiero facturar y me calcula el total factura.

A continuación lo que quiero es poder elegir un tipo de vencimiento, por ejemplo transferencia a 0, 30 y 60 días lo he hecho poniendo un combinado independiente con los tipos de vencimiento. Estos datos los debe meter en una tabla de vencimiento con el año, serie y número factura como enlace a la tabla facturas emitidas.

Jon: Lo miro y te comento, pero ya será mañana ya que es un poco tarde y he de terminar algunas cosas. Mis saludos >> Jacinto

¡Gracias, por tu tiempo! Yo también lo dejo por hoy, pero mañana voy a intentar hacer una trampa. Voy a poner un cuadro de texto invisible con el valor m y decirle que lo tome del formulario a ver si así va.

Jon: No sé si ya habrás resuelto el problema. Repasando la instrucción que tienes, no veo por donde corregir, salvo que en el entorno que tienes haya algo que no se refleja.

He intentado reproducir el error en una BD mía y con 'm' funciona. También lo hace declarando una variable de tipo String, pero al no ver fisicamente tu conjunto me temo que iremos alargando ésta pregunta sin llegar a una solución. Mis saludos >> Jacinto

Curiosamente, Jacinto, lo que ayer no funcionaba, hoy funciona. Me he vuelto loco, te he vuelto loco a ti, y resulta que ahora funciona con 'm'.

Muchísimas gracias por todo, y siento haberte vuelto loco.

Una consulta nueva, ¿hay alguna forma de quitar el mensaje de que se van a anexar los registros nuevos, desde Visual Basic?. He leído que desde herramientas de Access se puede hacer pero supongo que quitarás los mensaje en todos los casos, y me gustaría saber si se puede quitar un0 a uno, para poder permitir que unos salgan y otros no.

Jon: Necesitas una línea antes de la Consulta y otra después.

'Desactivar los mensajes

DoCmd.SetWarnings False

'Ejecutas tu consulta de Anexar
DoCmd.RunSQL "INSERT INTO.........
'Una vez ejecutada la Consulta: Activar mensajes >> Muy Importante hacerlo
DoCmd.SetWarnings True

Mis saludos >> Jacinto

Jon: Se me ha olvidado comentarte que si en lugar de usar:

DoCmd.RunSQL "INSERT INTO......... >> Usas

CurrentDB.Execute "INSERT INTO........

No te hace falta Desactivar" y "Activar" los Warnings. Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas