Como generar un archivo pdf y a su vez introducirlo en una tabla access

Tengo una base de datos con varias tablas, una de ellas se llama documentos y la otra Edificios, los campos son:

Documentos (Id, Descripción, Archivos, Fecha) y la otra Edificios (Id, Zona, Ubicación), tengo el código para al darle imprimir me genere un documento PDF de los edificios que tengo en la tabla ubicándolo en una carpeta de la base de datos, lo que no consigo es ese archivo introducirlo en la tabla documentos, supongo que primero tiene que localizarlo que la ruta del archivo

Crear PDF

DoCmd.OutputTo acReport, "Edificios", acFormatPDF, CurrentProject.patch & "C:\" & Format (Date, "dd-mm-yyyy") & "-" &Edificios.pdf"

La Ruta del Archivo

larutadelarchivo = CurrentProject.Patch & "C:\" & Format (Date, "dd-mm-yyyy") & "-" &Edificios.pdf".

Me gustaría que al darle al boton imprimir me generase todo eso directamente, actualmente lo tengo a través de un formulario pero me es mas engorroso.

1 respuesta

Respuesta
2

Si te tuviera que aconsejar, y suponiendo que quieras guardar la ruta(no te aconsejo usar campos OLE) en el campo Archivo de la tabla Documentos, es que después de la instrucción Docmd... pongas

Docmd.runsql"insert into documentos (archivo,fecha)values(""C:\users\.....\edificios.pdf"")"

Aunque te aparezca separado es en la misma línea

Luego para verlos bastaría con usar

Application. Followhyperlink Archivo

Si lo quieres guardar en un registro en concreto tendrías que usar

Docmd.runsql"update documentos set archivo=""C:\......"" where....

Por cierto, en la ruta, si pones Patch no te hará nada, en todo caso Path, además, la has puesto redundante

Si le dices currentproject path ya le estás diciendo c:\users\..\documents..donde está la base, por tanto sobre después lo de C:

¡Gracias! Voy a probar. 

Aun así cada día me genera un pdf cambiando lo que es la fecha. Por que se guarda 13032019edificios.pdf con ese código a la hora de meterlo en la base de datos no lo encontraría. ¿No?

No he entendido la pregunta. Pero si tengo un formulario

Y pulso el botón, me crea el archivo pdf

y además me guarda en la tabla Clientes, en el campo Archivo la ruta a ese archivo

De forma que si tengo el formulario Clientes

Cuando hago clic en el cuadro de texto Archivo(pero podía ser en otro evento)

El código del botón es

Private Sub Comando9_Click()
DoCmd.OpenReport "ventas", acPreview, , "idcliente=" & Me.IdCliente & ""
DoCmd.OutputTo acOutputReport, "Ventas", "PDFFormat(*.pdf)", "C:\users\cabarcos\documents\borrar\" & Format(Date, "dd-mm-yyyy") & "-" & "Edificios.pdf", False, "", , acExportQualityPrint
DoCmd.RunSQL "update clientes set archivo=""C:\users\cabarcos\documents\borrar\" & Format(Date, "dd-mm-yyyy") & "-" & "Edificios.pdf"" where idcliente=" & Me.IdCliente & ""
End Sub

Y en el evento Al recibir el enfoque del cuadro de texto Archivo 

Private Sub Archivo_GotFocus()
Application.FollowHyperlink Archivo
End Sub

¡Gracias! Cuando pueda lo pruebo. Pero viendo las fotos es lo que necesito

perdona icue, me salta un error y se me cierra la base de datos, creo que tu mandas llamar un formulario para introducir el archivo, yo quiero que al pulsar un botón que tengo en el informe genere un pdf después que meta el pdf en una tabla Documentos con columnas id, descripción, archivo, fecha y después que me imprima el informe

¿Un botón en un informe? Solo lo podrías ver y haría algo en vista informe, pero en vista preliminar ni aparecería. Pero funciona exactamente igual

Si tengo el formulario

Pulso el botón Abrir Informe, pero daría igual abrirlo desde la ventana de navegación.

Cuando pulso el botón

Y en el árbol de directorios

En el botón del formulario pongo

DoCmd.OpenReport "Ventas", acViewReport, , "idcliente=" & Me.IdCliente & ""

Y en el evento Al hacer clic del botón del informe

DoCmd.OutputTo acOutputReport, "Ventas", "PDFFormat(*.pdf)", "C:\users\cabarcos\documents\borrar\" & Format(Date, "dd-mm-yyyy") & "-" & "Edificios.pdf", False, "", , acExportQualityPrint
DoCmd.RunSQL "update clientes set archivo=""C:\users\cabarcos\documents\borrar\" & Format(Date, "dd-mm-yyyy") & "-" & "Edificios.pdf"" where idcliente=" & Me.IdCliente & ""

Ante todo muchas gracias, mi problema viene creo por que mi form ni mi informe tiene id, ya que es una consulta a una tabla, siempre es el mismo formulario, y como tu lo planteas no tengo la opción de coger el id, no se si colocándole un campo fecha al formulario tendré la misma opción

Vamos a ver si me explico, tanto si abres el informe desde la ventana de navegación como si lo abres desde un formulario sin individualizar nada, te pasaría el informe completo a pdf. Quiero decir, que si la tabla o consulta tiene 2.000 registros, en el informe te aparecerían esos 2.000, a menos que en la consulta le hayas puesto algún criterio que "delimite" los registros a presentar.

Prueba a poner, en el formulario

Docmd. Openreport"ventas", acviewreport

Lo que hará será abrirte el informe completo. Lo demás sigue igual.

Si si hasta ahí me funciona. Incluso el generar el pdf y guardarlo en la carpeta. Ahora el error me viene al introducirlo en la tabla. Ya q mi pdf no tiene id = me. Id

Pero habrá algún campo que individualice el registro donde quieras guardar la ruta, yo que sé, nombrecliente, dirección, DNI, o lo que sea.

Por ejemplo, ya que en la tabla Documentos hay un campo Fecha y que para guardar el PDF le pones Date(), podrías poner, por ejemplo

docmd.runsql"update clientes set archivo=.......... where fecha=Date()"

me sale como que se va a añadir algo pero no encuentra el archivo, como hago para que no me pregunte que se va a añadir un registro

Para evitar la dichosa ventanita antes de la instrucción pon

Docmd.setwarnings false

Pero no me creo que no te encuentre la ruta del archivo, si se la estás dando tú.

Private Sub Imprimir_Click()
DoCmd.SetWarnings False
DoCmd.OutputTo acOutputReport, "LISTA_DIARIA", acFormatPDF, CurrentProject.Path & "\..\01 - Lista Diaria\" & Format(Date, "dd-mm-yyyy") & " - " & "Lista Diaria.pdf", False, "", , acExportQualityPrint
DoCmd.RunSQL "update documentos set archivo=""CurrentProject.Path \..\01 - Lista Diaria\" & Format(Date, "dd-mm-yyyy") & " - " & "Lista Diaria.pdf"" where fecha=" & Date & ""
End Sub

Así tengo el botón

where fecha= Date()""

y asi tambien

esta es la tabla donde quiero tener todos archivos que voy creando en pdf

¡Pero si en el campo no hay fecha!

Mira, ponlo como Docmd.runsql"insert into Documentos(archivo)values("CurrentProject.Path \..\01 - Lista Diaria\" & Format(Date, "dd-mm-yyyy") & " - " & "Lista Diaria.pdf")"

Lo que hará será insertarte en un registro nuevo el valor de la ruta, en el campo Archivo, cada vez que pulses el botón.

¡Gracias! Me funciono. Gracias por la paciencia

no se si. Ya teniendo las dos. El update y el insert. Se podría configurar para que mirara si el archivo esta en la tabla y si esta que actualize y si no que lo inserte para no ir acumulando el mismo.

Puedes hacerlo de muchas formas. Por ejemplo, en la instrucción pon en la primera linea lo de docmd.setwarnings false

En la segunda puedes poner

If dcount("*","documentos","left([archivo],10) like format(date(),""dd-mm-yyyy"")")>=1 then

Msgbox"Ese archivo ya está guardado", vbokonly,"Es que no te enteras"

Docmd. Cancelevent

else

docmd.output...........

docmd.runsql"insert into............

end if

Es decir, al pulsar que cuente si hay algún archivo en la tabla que tenga en las 10 primeras letras las mismas que el día del sistema en formato dd-mm-aaaa, y si lo hay que muestre el mensaje y que no haga nada volviendo el cursor al informe. Y si no lo hay que ejecute la instrucción.

Perdona pero el if no me funciona. No me da ningún error pero no hace el recorrido

Para lo alargar, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo. Si lo haces, en el asunto del mensaje pon tu alias Francisco Nicolás, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas