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

Guardar archivo PDF en unidad de red
Comenzado por
jesus_lara
, ene 17 2012 08:50
7 respuestas en este tema
#1
Escrito 17 enero 2012 - 08:50
#2
Escrito 17 enero 2012 - 10:11
Como estas generando el archivo PDF?, al menos un poco de code no?
Saludos.
Saludos.
#3
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
#4
Escrito 17 enero 2012 - 10:38
Asumo que tu le indicas al report builder donde guardar dicho archivo, o no es asi?
#5
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.
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.
#6
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.
No es punto en contra de ReportBuilder o tu aplicación, es punto a favor de tu sistema operativo.
A ésto me refiero, precisamente.A la base de datos se accede por TCP/IP usando la IP del servidor, pero eso no implica que esa carpeta este compartida...
#7
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.
Saludos
Aquí un ejemplo.
delphi
// Example of exporting a PDF file to a stream using DeviceExportToStream function: TExtraDevicesFormat = (edfHTML, edfPDF, edfRTF, edfXLS, edfWK1, edfBMP, edfJPEG, edfTIFF, edfWQ1, edfPRN, edfXHTML); use TXRB; procedure TForm1.Button1Click(Sender: TObject); var MS: TMemoryStream; begin MS := TMemoryStream.Create; DeviceExportToStream(Rpt, edfPDF, MS); // At this point MS now contains the contents of the report! //Aquí puedes llevarlo al campo blob MS.Free; end;
Saludos
#8
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
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