Ir al contenido


Foto

Guardar archivo PDF en unidad de red


  • Por favor identifícate para responder
7 respuestas en este tema

#1 jesus_lara

jesus_lara

    Member

  • Miembros
  • PipPip
  • 29 mensajes
  • LocationCadiz

Escrito 17 enero 2012 - 08:50

Buenas tardes a todos:

Se me plantea un problema en d2010, Firebird y  Report Builder.
Genero un reporte en PDF, pero quiero guardarlo en el mismo sitio donde esta la Base de Datos, normalmente en una unidad de red a la que accedo via direccion IP sin problemas, pero no consigo que me guarde el PDF generado en el mismo directorio donde se encuentra los datos.

Hay alguna forma de copiar un archivo en una unidad disponible en la red a traves de la IP de la maquina

Gracias y un saludo
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 17 enero 2012 - 10:11

Como estas generando el archivo PDF?, al menos un poco de code no?

Saludos.
  • 0

#3 jesus_lara

jesus_lara

    Member

  • Miembros
  • PipPip
  • 29 mensajes
  • LocationCadiz

Escrito 17 enero 2012 - 10:34

Directamente desde Report Builder se genera el PDF sin problemas lo que no consigo es guardarlo en la unidad remota
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 17 enero 2012 - 10:38

Asumo que tu le indicas al report builder donde guardar dicho archivo, o no es asi?
  • 0

#5 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 17 enero 2012 - 11:25

A la base de datos se accede por TCP/IP usando la IP del servidor, pero eso no implica que esa carpeta este compartida, de hecho esa IP podría ser de internet y no de tu red local, pero además, de estar accesible, podría estarlo con cualquier nombre o letra de unidad, vamos, que lo que quieres en principio no es posible.

Tu necesitarías tener acceso desde tu programa al fichero de la base de datos como fichero, pero no puedes en general hacer eso, de hecho debería no estar accesible como carpeta compartida esa ubicación por temas de seguridad (nadie quiere que le borren ese fichero desde una estación), incluso en sistemas "bien montados" el motor de base de datos se inicia con un usuario especial como servicio, y solo ese usuario tiene acceso a la carpeta donde están los ficheros de datos.

Yo este tipo de cosas siempre las hago tomando como base la carpeta del exe, que recomiendo siempre que sea una unidad de red compartida, y también recomiendo que los datos estén fuera de esa carpeta y sin compartir. Miro a ver si existe la subcarpeta "pdf", por ejemplo, la creo si no existe, y guardo dentro el fichero pdf. Algo como

ExtractFilePath(ParamStr(0))+'pdf/'+filename;

Bueno, la barra es la invertida, pero uso un teclado para niños que no trae casi teclas!

Solo si el motor de base de datos permite algo así, tipo exportar un blob a un fichero local para el servidor, podrías conseguir algo así, pero dudo que tengas algo parecido, FireBird solo lo permite para ficheros txt tipo csv que llevan tablas externas a la base de datos.
  • 0

#6 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 17 enero 2012 - 11:45

Si no tienes "mapeada" en una unidad el path donde quieres guardar, y si no tienes derechos de escritura, no veo cómo puedas solucionar ésto.

No es punto en contra de ReportBuilder o tu aplicación, es punto a favor de tu sistema operativo.

A la base de datos se accede por TCP/IP usando la IP del servidor, pero eso no implica que esa carpeta este compartida...

A ésto me refiero, precisamente.
  • 0

#7 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 17 enero 2012 - 11:57

Una posible solución sería crear una tabla con un campo blob para guardar los reportes, con  TExtraDevices para ReportBuilder es posible exportar el reporte como  un stream, que podrías almacenarlo y recuperarlo desde el campo blob.

Aquí un ejemplo.



delphi
  1. // Example of exporting a PDF file to a stream using DeviceExportToStream function:
  2.  
  3. TExtraDevicesFormat = (edfHTML, edfPDF, edfRTF, edfXLS, edfWK1, edfBMP, edfJPEG, edfTIFF,
  4. edfWQ1, edfPRN, edfXHTML);
  5. use
  6.   TXRB;
  7. procedure TForm1.Button1Click(Sender: TObject);
  8. var
  9.   MS: TMemoryStream;
  10. begin
  11.   MS := TMemoryStream.Create;
  12.   DeviceExportToStream(Rpt, edfPDF, MS);
  13. // At this point MS now contains the contents of the report!
  14. //Aquí puedes llevarlo al campo blob
  15.   MS.Free;
  16. end;



Saludos
  • 0

#8 jesus_lara

jesus_lara

    Member

  • Miembros
  • PipPip
  • 29 mensajes
  • LocationCadiz

Escrito 18 enero 2012 - 03:57

Gracias a todos por vuestras respuestas....

Creo que lo que hare sera guardar localmente en el directorio del exe una carpeta con los PDF´s generados y no me complicare la vida


Saludos y gracias
  • 0




IP.Board spam blocked by CleanTalk.