var Mem: TMemoryStream; Jpg: TJpegImage; begin mem:=TMemoryStream.Create; Jpg:=TJpegImage.Create; TBlobField(query1.Fields[n]).SaveToStream(mem); Jpg.LoadFromStream(mem); image1.picture.Bitmap.Assign(Jpg); mem.Free; Jpg.Free; end;
这个就可以 uses Jpeg; procedure Tform1.Db_Addpic(sender:Tobject); var PicName,Ext:string; JpegImage:TJpegImage; begin if openpicturedialog1.execute then begin DB_PIC.append; PicName:=openpictureDialog1.Filename; Ext:=ExtractFileExt(PicName); if UpperCase(ExtName)='.BMP' then begin //直接存入数据库 end else if (UpperCase(ExtName)='.JPG') or (UpperCase(ExtName)='.JPEG') then begin JPEgImage:=TJpegImage.create; try JpegImage.LoadfromFile(PicName); DB_PIC.Picture.Graphic.Assign(JpegImage); DB_Pic.Post; Finally JpegImage.free; end; end; end; end;
我的方法可以把任何文件存入数据库中。 数据库:SQL Server。 procedure TForm1.Button1Click(Sender: TObject); var Fs:TFileStream; tmp:TStream; F:File of Byte; size:Longint; //文件大小 time:string; //文件时间 begin if opendialog1.Execute then begin AssignFile(F,opendialog1.FileName); reset(F); size:=Filesize(F);//获取文件大小。 time:=DatetimetoStr(FileDateToDateTime(FileAge(opendialog1.FileName)));//获取文件创建时间。 closefile(F); //关闭打开的文件。 Fs:=TFileStream.Create(pchar(opendialog1.FileName), fmOpenRead or fmShareDenyWrite); adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add('select * from File_Tab'); adoquery1.Open; adoquery1.Insert; adoquery1.FieldByName('FileName').AsString:=ExtractFileName(opendialog1.FileName); //存储文件名称 adoquery1.FieldByName('FileKind').AsString:=ExtractFileExt(opendialog1.FileName); //存储文件扩展名。 adoquery1.FieldByName('FileSize').AsInteger:=size; //存储文件的大小。 adoquery1.FieldByName('FileTime').AsString:=time; //存储文件的创建时间。 adoquery1.FieldByName('SaveTime').AsDateTime:=now(); //该文件存入库的时间。 Tmp:=adoquery1.CreateBlobStream(adoquery1.FieldByName('FileContent'),bmReadWrite); //把整个文件以二进制的形式存入数据库。 Tmp.CopyFrom(fs, 0); Tmp.free; adoquery1.Post; fs.Free; end; end;procedure TForm1.Button2Click(Sender: TObject); var Fs:tmemorystream; tmp:TStream; begin adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add('select * from File_Tab'); adoquery1.Open; adoquery1.First; //这里以保存第一条记录为例。 savedialog1.FileName:=adoquery1.FieldValues['FileName']; //以原文件的文件名进行保存。 if savedialog1.Execute then begin Fs :=tmemorystream.Create; begin Tmp:=adoquery1.CreateBlobStream(adoquery1.FieldByName('FileContent'), bmRead); Fs.CopyFrom(Tmp,Tmp.Size); if FileExists(savedialog1.FileName) then begin if application.MessageBox('该文件已存在,是否替换?','信息提示',MB_YesNo+MB_IconQuestion+MB_DefButton2)=IdYes then begin fs.SaveToFile(pchar(savedialog1.FileName)); application.MessageBox('文件保存成功!','信息确认',MB_OK); end else application.MessageBox('文件保存失败!','信息确认',MB_OK); // messagedlg('您要继续运行吗?',mtconfirmation,[mbyes,mbno],0); end else begin fs.SaveToFile(pchar(savedialog1.FileName)); application.MessageBox('文件保存成功!','信息确认',MB_OK); end; tmp.free; end; fs.Free; end; adoquery1.close; end;注意:存入文件的那个字段类型为image。
Mem: TMemoryStream;
Jpg: TJpegImage;
begin
mem:=TMemoryStream.Create;
Jpg:=TJpegImage.Create;
TBlobField(query1.Fields[n]).SaveToStream(mem);
Jpg.LoadFromStream(mem);
image1.picture.Bitmap.Assign(Jpg);
mem.Free;
Jpg.Free;
end;
uses Jpeg;
procedure Tform1.Db_Addpic(sender:Tobject);
var
PicName,Ext:string;
JpegImage:TJpegImage;
begin
if openpicturedialog1.execute then
begin
DB_PIC.append;
PicName:=openpictureDialog1.Filename;
Ext:=ExtractFileExt(PicName);
if UpperCase(ExtName)='.BMP' then
begin
//直接存入数据库
end
else if (UpperCase(ExtName)='.JPG') or (UpperCase(ExtName)='.JPEG') then
begin
JPEgImage:=TJpegImage.create;
try
JpegImage.LoadfromFile(PicName);
DB_PIC.Picture.Graphic.Assign(JpegImage);
DB_Pic.Post;
Finally
JpegImage.free;
end;
end;
end;
end;
数据库:SQL Server。
procedure TForm1.Button1Click(Sender: TObject);
var
Fs:TFileStream;
tmp:TStream;
F:File of Byte;
size:Longint; //文件大小
time:string; //文件时间
begin
if opendialog1.Execute then
begin
AssignFile(F,opendialog1.FileName);
reset(F);
size:=Filesize(F);//获取文件大小。
time:=DatetimetoStr(FileDateToDateTime(FileAge(opendialog1.FileName)));//获取文件创建时间。
closefile(F); //关闭打开的文件。
Fs:=TFileStream.Create(pchar(opendialog1.FileName), fmOpenRead or fmShareDenyWrite);
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from File_Tab');
adoquery1.Open;
adoquery1.Insert;
adoquery1.FieldByName('FileName').AsString:=ExtractFileName(opendialog1.FileName); //存储文件名称
adoquery1.FieldByName('FileKind').AsString:=ExtractFileExt(opendialog1.FileName); //存储文件扩展名。
adoquery1.FieldByName('FileSize').AsInteger:=size; //存储文件的大小。
adoquery1.FieldByName('FileTime').AsString:=time; //存储文件的创建时间。
adoquery1.FieldByName('SaveTime').AsDateTime:=now(); //该文件存入库的时间。
Tmp:=adoquery1.CreateBlobStream(adoquery1.FieldByName('FileContent'),bmReadWrite); //把整个文件以二进制的形式存入数据库。
Tmp.CopyFrom(fs, 0);
Tmp.free;
adoquery1.Post;
fs.Free;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
Fs:tmemorystream;
tmp:TStream;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from File_Tab');
adoquery1.Open;
adoquery1.First; //这里以保存第一条记录为例。
savedialog1.FileName:=adoquery1.FieldValues['FileName']; //以原文件的文件名进行保存。
if savedialog1.Execute then
begin
Fs :=tmemorystream.Create;
begin
Tmp:=adoquery1.CreateBlobStream(adoquery1.FieldByName('FileContent'), bmRead);
Fs.CopyFrom(Tmp,Tmp.Size);
if FileExists(savedialog1.FileName) then
begin
if application.MessageBox('该文件已存在,是否替换?','信息提示',MB_YesNo+MB_IconQuestion+MB_DefButton2)=IdYes then
begin
fs.SaveToFile(pchar(savedialog1.FileName));
application.MessageBox('文件保存成功!','信息确认',MB_OK);
end
else
application.MessageBox('文件保存失败!','信息确认',MB_OK);
// messagedlg('您要继续运行吗?',mtconfirmation,[mbyes,mbno],0);
end
else
begin
fs.SaveToFile(pchar(savedialog1.FileName));
application.MessageBox('文件保存成功!','信息确认',MB_OK);
end;
tmp.free;
end;
fs.Free;
end;
adoquery1.close;
end;注意:存入文件的那个字段类型为image。