Ver Mensaje Individual
  #1  
Antiguo 12-03-2012
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Reputación: 18
TiammatMX Va camino a la fama
Question Guardar un archivo PDF en un campo de MS SQL Server 2008 R2.

Buen día, jóvenes delphineros:

Les platico mi problema. El usuario para el que estoy programando desea, más bien, exige poder guardar una serie de archivos *.PDF en varios registros de una tabla de MS SQL Server 2008 R2 (el campo definido como binary), por que desea mostrarlos en una miniatura y tenerlos siempre a mano. Yo estoy plenamente consciente que guardar ésos archivos convertiría la base de datos en un monstruo, pero así lo quieren.

Estuve haciendo una primera aproximación a cómo debería ser el guardado de los datos, pero obviamente no funciona y es donde yo recurro a la sabiduría compartida del grupo, para que me asesoren y/o colaboren en la solución de ésta tarea.

Código Delphi [-]
procedure TfrmContenedor.btnImportarClick(Sender: TObject);
var
  sNombreArchivo : string;
  fsPDF : TStream;
  bfCampo : TBlobField;
begin
  sNombreArchivo := '';
  with dlgAbrirArchivo do
  begin
    InitialDir := ExtractFilePath(Application.ExeName);
    Filter := 'Archivos de Adobe Acrobat (*.pdf)|*.PDF';
    Title := 'Buscar archivos de documentos para el paciente.';
    DefaultExt := '*.pdf';

    if Execute then
      sNombreArchivo := FileName;
  end;

  if sNombreArchivo <> '' then
  begin
    fsPDF := TFileStream.Create(sNombreArchivo,fmOpenRead);
    bfCampo := TBlobField.Create(Self);
    with tblPDFs do
    begin
      fsPDF.Read(bfCampo,fsPDF.Size);
      Connection := qryDocumentos.Connection;
      TableName := 'HY11_DocumentosPacElec';
      Open;
      try
        Insert;
        strngfldPDFsE2_CTRL_PAC.Value := lblExpediente.Caption;
        intgrfldPDFsC42_Documento_ID.Value := StrToInt(Texto2ID(chklstDocumentos.Items.Strings[chklstDocumentos.ItemIndex]));
        bytsfldPDFsHY11_DocumentoElectronico.GetData(bfCampo);
        Post;
      finally
        Close;
      end;
    end;
    fsPDF.Destroy;
    bfCampo.Destroy;
  end;
end;

Nuevamente, se requiere necesariamente que el archivo sea guardado en una tabla. Acepto cualquier tipo de ayuda, hasta apoyo moral.

De antemano, gracias.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita