Ver Mensaje Individual
  #2  
Antiguo 14-03-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Reputación: 19
olbeup Va camino a la fama
Hola Tiammat

Actualmente grabo las fotos y los pdf's dentro de la base de datos, como bien dices, para tenerlas siempre a mano y en cualquier momento.

La función que utilizo funciona correctamente, actualmente utilizo SQL SERVER 2005 sin ningún problema ni error de grabación o recuperación del fichero, tanto JPG o PDF.

Esta función trabaja directamente con un ADOQuery ya definido y conectado a la DB.

Cita:
Devuelve un fichero temporal único
Código Delphi [-]
function GetNewFileTemp(Prefix: String): String;
var
  PathTmp: Array[0..MAX_PATH] of Char;
  FileTmp: Array[0..MAX_PATH] of Char;
begin
  FillChar(PathTmp, SizeOf(PathTmp), #0);
  FillChar(FileTmp, SizeOf(FileTmp), #0);

  GetTempPath(MAX_PATH, PathTmp);
  GetTempFileName(PathTmp, PChar(Prefix), 0, FileTmp);

  Result := FileTmp;
end;

Cita:
Devuelve el pdf del campo query que está activo en ese momento
Código Delphi [-]
function GetFieldDBToPDF(QryDB: TADOQuery): WideString;
var
  Stream: TMemoryStream;
  FileTmp: String;
begin
  Stream := TMemoryStream.Create;
  FileTmp := GetNewFileTemp('~t1');
  try
    TBlobField(QryDB.FieldByName('PDFIMAGEN')).SaveToStream(Stream);
    Stream.Position := 0;
    Stream.SaveToFile(FileTmp);
  finally
    Stream.Free;
  end;
  Result := FileTmp;
end;

Cita:
Graba en el campo query que está activo en ese momento el PDF
Código Delphi [-]
procedure UpdatePDFToFieldDB(QryDB: TADOQuery; Filename: WideString);
var
  Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  Stream.LoadFromFile(FileName);
  try
    QryDB.Edit;
      (QryDB.FieldByName('PDFIMAGEN') as TBlobField).Clear;
      (QryDB.FieldByName('PDFIMAGEN') as TBlobField).LoadFromStream(Stream);
    QryDB.Post;
  finally
    Stream.Free;
  end;
end;

Cita:
Añade en el campo query que está activo en ese momento el PDF
<Parametros>, ADOQuery, Filename, FieldNameID, FieldValueID
Código Delphi [-]
procedure AddPDFToFieldDB(QryDB: TADOQuery; Filename: WideString; FieldNameID: String; FieldValueID: Integer);
var
  Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  try
    if (Length(Filename) > 0) then
    begin
      Stream.LoadFromFile(FileName);
      QryDB.Append;
      QryDB.Edit;
        (QryDB.FieldByName('PDFIMAGEN') as TBlobField).Clear;
        (QryDB.FieldByName('PDFIMAGEN') as TBlobField).LoadFromStream(Stream);
        QryDB.FieldByName(FieldNameID).AsInteger := FieldValueID;
      QryDB.Post;
    end
    else begin
      QryDB.Edit;
        (QryDB.FieldByName('PDFIMAGEN') as TBlobField).Clear;
      QryDB.Post;
    end;
  finally
    Stream.Free;
  end;
end;
Este último utilizo el FieldNameID para hacer referencia algún campo de la base de datos FieldValueID es el valor que debe tomar.
Eje.
Si se añade un registro en una DB de ITVPDF ésta DB los campos que tienen son (IDITVDF, PDFIMAGEN, ITVID), el FieldNameID = ITVID y el valor de éste es el FieldValueID = ITVID, ésta función la utilizo para varias DB distinstas, donde el FieldNameID puede variar, por esta razón se envía el campo y el valor.

Estas funciones han sido realizadas gracias a las muchas respuestas sobre el tema en esta comunidad ClubDelphi.

Espero que estas funciones puedan ayudar a toda la comunidad.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita