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.
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:
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
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
¡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.
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.
- Compartir respuesta
