请问高手:如何将jpeg格式的文件存入数据库???(50分)

  • 主题发起人 主题发起人 cloud_scorpion
  • 开始时间 开始时间
C

cloud_scorpion

Unregistered / Unconfirmed
GUEST, unregistred user!
碰上一个大难题了,各位,紧急求助呀!!
请问:在Delphi中如何将jpeg格式的图象文件存入Oracle数据库中???
我知道是用二进制进行转换,可是谁能给我一个实现的代码?这样比较清楚点。
请各位不吝赐教!!谢谢呀
 
看看李维的书,有
 
to mckz:
要是看过的话就不用问了,就是没得书呀
 
用流来实现:)
 
这是一段图片存入的例子。
代码:
var
  msMyFile: TMemoryStream;
  MaxNo: string;
begin
  msMyFile := TMemoryStream.Create;
  if FileExists('f:/line.bmp') then
    msMyFile.LoadFromFile('f:/line.bmp');
  MaxNo := IntToStr(LoginInf.GetTableNextNo('mytable'));
  with LoginInf.MySQLPlus do
  begin
    Close;
    SQL.Clear;
    SQL.Add('insert into mytable (no) values ('
      + MaxNo + ')');
    ExecSQL;
    LoginInf.CommitData;
    Close;
  end;

  with LoginInf.MySQLPlus do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select mytable.rowid, mytable.myfields from mytable '
      + 'where no = ' + MaxNo);
    ShowMessage(SQL.Text);
    Open;
    Edit;
    TBlobField(Fields[0]).LoadFromStream(msMyFile);
    LoginInf.CommitData;
    Post;
    LoginInf.RollBackData;
  end;
  msMyFile.Free;
end;
 
//通用的BLOB文件存储修改删除程序

procedure TForm1.Button1Click(Sender: TObject); //插入
var
fs : TFileStream;
b: TBlobByteData;
begin
if ADOQuery1.Active and (not (ADOQuery1.State in [dsInsert, dsEdit])) then
begin
ADOQuery1.Insert;
if OpenDialog1.Execute then
begin
ADOConnection1.BeginTrans;
try
// ADOQuery1BLOBFIELD.
ADOQuery1FILENAME.AsString := OpenDialog1.FileName;
ADOQuery1BLOBFIELD.LoadFromFile(OpenDialog1.FileName);
//ADOQuery1.GetBlobFieldData(1,ADOQuery1BLOBFIELD);
StatusBar1.Panels[1].Text := IntToStr(ADOQuery1BLOBFIELD.BlobSize)+'Bytes';
ADOQuery1.Post;
ADOConnection1.CommitTrans;
ShowMessage('Insert file sucess!');
except
ADOConnection1.RollbackTrans;
ADOQuery1.Active := false;
ADOQuery1.Active := true;
ShowMessage('Insert file fault!');
end;
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject); //读取
var
FS : TFileStream;
begin
if ADOQuery1.Active and not ADOQuery1.IsEmpty then
begin
SaveDialog1.FileName := ADOQuery1.FieldByName('FileName').AsString;
if SaveDialog1.Execute then
begin
FS := TFileStream.Create(SaveDialog1.FileName,fmCreate);
try
try
ADOQuery1BLOBFIELD.SaveToStream(FS);
ShowMessage('Read file sucess!');
except
ShowMessage('Read file fault!');
end;
finally
FreeAndNil(FS);
end;
end;
end;
end;



procedure TForm1.Button4Click(Sender: TObject); //删除
begin
if ADOQuery1.Active and not ADOQuery1.IsEmpty then
begin
ADOConnection1.BeginTrans;
try
ADOQuery1.Delete;
ADOQuery1.Edit;
ADOQuery1.Post;
ADOConnection1.CommitTrans;
ShowMessage('Delete file sucess!');
except
ADOConnection1.RollbackTrans;
ADOQuery1.Active := false;
ADOQuery1.Active := true;
ShowMessage('Delete file fault!');
end;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);//更新
begin
if ADOQuery1.Active and (not (ADOQuery1.State in [dsInsert, dsEdit])) then
begin
//
if OpenDialog1.Execute then
begin
ADOConnection1.BeginTrans;
try
ADOQuery1.Edit;
ADOQuery1BLOBFIELD.LoadFromFile(OpenDialog1.FileName);
ADOQuery1.Post;
ADOConnection1.CommitTrans;
ShowMessage('Update file sucess!');
except
ShowMessage('Update file fault!');
ADOConnection1.RollbackTrans;
end;
end;
end;
end;
 
可以把Jpg转换为Bmp存储,DFW里面有,全文搜索一下吧。
 
to 天与地:
如果这样的话,有些图片在保证其清晰度的状态下就会超过1M,这样冗余很大
 
还有个办法 存图片的路径 (不要存绝对路径)
 
to highyonder:
如果是这样的话,就没有把图片保存到数据库中,若路径改变后则图片数据丢失。
 
试过我的代码没有,这段代码已经在很多地方使用过的
 
to xiaoywh:
我还没有时间来试,不过我想问一下,MIDAS控件能否也这么来处理?因为我没有用过ADO控件。
 
后退
顶部