Ir al contenido


Foto

Archivos PDF guardados en una tabla de SQL Server.


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

#1 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 09 marzo 2012 - 03:50

(Título original: "Sí, ya sé, ya sé..., las reglas del foro (TiammatMX Emo y rebelde)") Ya sé que las reglas de DelphiAccess sugieren que se haga un hilo por duda, pregunta o sugerencia..., pero quiero avisar antes el por qué.

Duda #1.- En MS SQL Server 2008 R2, ¿qué tipo de campo debo definir para guardar un archivo PDF? En éste caso, plenamente justificado para evitar que se sature el directorio de imágenes y documentos, además que así me pidieron que se hiciese.

Duda #2.- Dado el tipo de campo del cuestionamiento anterior, una vez que tenga el nombre del archivo a guardar en el campo, ¿cómo puedo "subir" el archivo al campo y que se guarde?

Gracias por su colaboración, y ésta vez, no aceptaré que me regañe EgoPolice...  :p :D :p :D :p
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 09 marzo 2012 - 03:58

Lo malo es que te saltas la regla #1, poner titulos adecuados o relativos al problema, eso no ayuda mucho a mantener la base de contenidos ordenados.  *-)

Va
  • 0

#3 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 09 marzo 2012 - 04:13

...poner titulos adecuados o relativos al problema...

Hecho el tiro... :( :( :( : : :
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 09 marzo 2012 - 04:30

Hola mi chavo,

Yo sugiero que uses un campos de tipo blob, ¿como hacerlo? bueno pues te tocará  investigar un poco acerca de Streams :)

Saludos

PD, Ya vez, que bien se ve el título (y)
  • 0

#5 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 09 marzo 2012 - 04:55

...Yo sugiero que uses un campos de tipo blob...

jojojojojojo  No existen los campos tipo blob en SQL Server 2008 R2..., binary es lo más cercano...

...¿como hacerlo? bueno pues te tocará  investigar un poco acerca de Streams

Precisamente por que no tengo mucho tiempo para documentarme, necesito un poco de ayuda.  : *-) :

PD, Ya vez, que bien se ve el título (y)

:p :p :p :p :p :p :p :p :p :p :p :p :p :p
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 09 marzo 2012 - 05:05

jojojojojojo  No existen los campos tipo blob en SQL Server 2008 R2..., binary es lo más cercano...


Eso, eso, no conozco los tipos aceptados, al final es el simil de blob ;)

En cuanto a como almacenarlo, al ser un campo binario, supongo que se debe meter sin problema desde un TFilestream. Digo, es cosa de probar.

Saludos

  • 0

#7 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 12 marzo 2012 - 11:23

A ver, les muestro mi primera aproximación a resolver el problema. Obviamente, arroja excepción y no funciona. Capaz que alguien me puede echar una manita (pero no encima, por favor :p ):



delphi
  1. procedure TfrmContenedor.btnImportarClick(Sender: TObject);
  2. var
  3.   sNombreArchivo : string;
  4.   fsPDF : TStream;
  5.   bfCampo : TBlobField;
  6. begin
  7.   sNombreArchivo := '';
  8.   with dlgAbrirArchivo do
  9.   begin
  10.     InitialDir := ExtractFilePath(Application.ExeName);
  11.     Filter := 'Archivos de Adobe Acrobat (*.pdf)|*.PDF';
  12.     Title := 'Buscar archivos de documentos para el paciente.';
  13.     DefaultExt := '*.pdf';
  14.  
  15.     if Execute then
  16.       sNombreArchivo := FileName;
  17.   end;
  18.  
  19.   if sNombreArchivo <> '' then
  20.   begin
  21.     fsPDF := TMemoryStream.Create;
  22.     bfCampo := TBlobField.Create(Self);
  23.     with tblPDFs do
  24.     begin
  25. {      bfCampo.LoadFromFile(sNombreArchivo);
  26.       bfCampo.SaveToStream(fsPDF);}
  27.       Connection := qryDocumentos.Connection;
  28.       TableName := 'HY11_DocumentosPacElec';
  29.       Open;
  30.       try
  31.         Insert;
  32.         strngfldPDFsE2_CTRL_PAC.Value := lblExpediente.Caption;
  33.         intgrfldPDFsC42_Documento_ID.Value := StrToInt(sID);
  34.         [color=red]bytsfldPDFsHY11_DocumentoElectronico. LoadFromFile(sNombreArchivo);[/color]
  35.         Post;
  36.       finally
  37.         Close;
  38.       end;
  39.     end;
  40.     fsPDF.Destroy;
  41.     bfCampo.Destroy;
  42.   end;
  43. end;



La línea que DEBERÍA estar marcada en rojo es precisamente donde da la excepción, y en donde quiero guardar el archivo PDF completo (no la ruta+nombre, no el texto, sino el archivo completo tal cual) para que sea contenido y respaldado (intención primaria del usuario) cada vez que la base de datos sea respaldada y que no se pierda ningún documento.

Si tienen un código que me permita llevar a cabo ésta tarea, se los agradeceré muchísimo.
  • 0

#8 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 15 marzo 2012 - 09:19

¿Ningún voluntario?
  • 0

#9 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 15 marzo 2012 - 11:19

Algún mensaje en tu excepción?

Saludos
  • 0

#10 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 15 marzo 2012 - 12:35

Saludos.

La variable bfCampo se supone que debería tener asignado el campo blob de la BD, osea en esta línea:

delphi
  1. bytsfldPDFsHY11_DocumentoElectronico. LoadFromFile(sNombreArchivo);



Algo como esto:



delphi
  1. bfCampo := DataSet.FieldByName('CampoBlob');
  2. bfCampo.LoadFromFile(sNombreArchivo);



¿Algo así?
  • 0

#11 asesperu

asesperu

    Newbie

  • Miembros
  • Pip
  • 1 mensajes
  • LocationAv. Malecon Checa 1005

Escrito 18 marzo 2012 - 08:47

Me parece que hay forma de grabar de la siguiente manera:



delphi
  1. if opdFoto.Execute then
  2. begin
  3.   try
  4.   qryFotoEntida.ParamByName('IdEntida').AsString := IdEntida;
  5.   qryFotoEntida.Open;
  6.   qryFotoEntida.Edit;
  7.   qryFotoEntidaPhotoEntida.loadfromfile(opdFoto.FileName);
  8.   qryFotoEntida.Post;
  9.  
  10. except
  11.     on E: Exception do
  12.     begin
  13.       Beep;
  14.       MessageDlg(E.Message + #10 + 'The photo does not exist',mtWarning,[mbRetry],0);
  15.       Exit;
  16.     end;
  17.   end;
  18. end;



ya que el cargar directamente da un error en el delphi por que no carga correctamente y se tiene que hacer un cambio en las unit base
  • 0




IP.Board spam blocked by CleanTalk.