PASO 1: Puedes tomar como ejemplo la siguiente tabla creada en SQL 2005 pero que para las versiones anteriores de SQL es lo mismo :
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Archivos_Adjuntos](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [nchar](100) NOT NULL,
[Tipo_MIME] [nchar](50) NOT NULL,
[datos] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
PASO 2: Una vez halla llamado la tabla desde Delphi y tengas lista tu forma utiliza el siguiente codigo para guardar un archivo en la tabla:
procedure TForm2.CargarArchivo;
var FStr: TFileStream;
BlobStr: TStream;
begin
if OpenDialog1.Execute then
begin
FStr :=
TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyNone);
try
tAdjuntos.Append;
tAdjuntosNombre.AsString := ExtractFileName(OpenDialog1.FileName); tAdjuntosTipo_MIME.AsString :=
'application/octect-stream';
BlobStr :=
tAdjuntos.CreateBlobStream(tAdjuntosdatos, bmWrite);
try
BlobStr.CopyFrom(FStr, FStr.Size);
finally
BlobStr.Free;
end;
tAdjuntos.Post;
finally
FStr.Free;
end;
end;
end;
PASO 3: Una vez guardado el archivo en la base de datos, usa el siguiente procedimiento desde delphi para descargarlo:
procedure DescargarArchivo;
var
BlobStr: TStream;
FStr: TFileStream;
begin
if tAdjuntos.IsEmpty then
Exit;
if SaveDialog1.FileName <> '' then
SaveDialog1.FileName := TrailingPathDelimiter(ExtractFilePath(SaveDialog1.FileName)) + Trim(tAdjuntosNombre.AsString)
else
SaveDialog1.FileName := Trim(tAdjuntosNombre.AsString);
if SaveDialog1.Execute then
begin
BlobStr := tAdjuntos.CreateBlobStream(tAdjuntosdatos, bmRead);
try
FStr :=
TFileStream.Create(SaveDialog1.FileName, fmCreate or fmShareExclusive);
try
FStr.CopyFrom(BlobStr, BlobStr.Size);
finally
FStr.Free;
end;
finally
BlobStr.Free;
end;
end;
end;