我的方法可以把任何文件存入数据库中。
数据库: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;
这个就可以
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;