如何将一个二进制文件存进SQL Server 2000的Binary字段??(100分)

  • 主题发起人 主题发起人 dtwind
  • 开始时间 开始时间
D

dtwind

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将一个二进制文件存进SQL Server 2000的Binary字段??
好像用AblobField.LoadFromfile(aFileName)不行啊
 
我使用的是ADOQuery,一下子没找到直接使用Stream的例子,下面是一个变通的例子:
function funBlobToString(const FileName: string): string;
begin
with TFileStream.Create(FileName, fmOpenRead) do
try
SetLength(Result, Size);
Read(Pointer(Result)^, Size);
finally
Free;
end;
end;
AdoQuery1.FieldByName('Image').AsString := funStreamToString(msSource);
使用函数funStreamToString把文件内容转换为字符串,然后给字段赋值。
 
不需要将文件全存入数据库
只需将文件名存入即可
 
//bde要设置blobsize否则存进去,读不出来完整
数据库SQL Server,存放文件的字段类型Image
Create Table MyTable
(
FileName VarChar(20),
FileSource Image
)
存放文件到数据库

var FileName :String;
FileName := ExtractFileName(OpenDialog1.FileName);
with Query do
begin
Close;
Sql.Clear;
Sql.Add('INSERT INTO MyTable VALUES (:FileName,:FileSource)');
ParamByName('FileName').AsString := FileName;
ParamByName('FileSource').LoadFromFile(OpenDialog1.FileName,ftBolob);
ExecSQL;
end;



从数据库中取出文件

var FileName :String;
begin
with Query do
begin
Close;
Sql.Clear;
Sql.Add('SELECT * FROM MyTable WHERE FileName = '?'');
Open; FileName := 'c:/'+FieldByName('FileName').AsString;
(FieldByName('FileSource') AS TBlobField).SaveToFile(FileName);
end;
end;
 
将BMP放入DBASE和Paradox的BLOB字段中

(1)使用裁剪板
procedure TForm1.Button1Click(Sender: TObject);
var
C: TClipboard;
begin
C := TClipboard.Create;
try
if Clipboard.HasFormat(CF_BITMAP) then
DBImage1.PasteFromClipboard
else
ShowMessage('Clipboard does not contain a bitmap!');
finally
C.Free;
end;
end;

(2)从文件调入
procedure TForm1.Button2Click(Sender: TObject);
begin
Table1Bitmap.LoadFromFile(
'c:/delphi/images/splash/16color/construc.bmp');
end;

(3)从其他控件的BITMAP类中读入
procedure TForm1.Button3Click(Sender: TObject);
var
B: TBitmap;
begin
B := TBitmap.Create;
try
B.LoadFromFile(
'c:/delphi/images/splash/16color/athena.bmp');
DBImage1.Picture.Assign(B);
finally
B.Free;
end;
end;



显示BLOB字段的BMP图

(1)直接显示当前记录
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap.Assign(Table1Bitmap);
//Table1Bitmap为在Table中添加的字段
end;

(2)直接显示
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap.Assign(
TBLOBField(Table1.Fields[1]));
end;
//Image1.Picture.Bitmap.Assign(Table1.Fields[1]);也行

(3)不直接显示
procedure TForm1.Button2Click(Sender: TObject);
var
B: TBitmap;
begin
B := TBitmap.Create;
try
B.Assign(Table1Bitmap);
Image1.Picture.Bitmap.Assign(B);
finally
B.Free;
end;
end;

 
多人接受答案了。
 
后退
顶部