关于Blob域
我将一个Zip文件存放到oralc8i的数据库中,取出来发现文件长度虽然没有变,但是却无法打开,用fc比较发现,在文件中间有一个字节被重复了一次,末尾又少了一个字节,程序在下面.诸位帮我看看.
测试用的zip文件有3m左右.
unit Mainfrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBTables, Grids, DBGrids, DB, ADODB, ExtCtrls, DBCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
db: TDatabase;
Table1: TTable;
DataSource2: TDataSource;
DBGrid2: TDBGrid;
adoSbtn: TButton;
bdeGbtn: TButton;
adoGbtn: TButton;
bdeSbtn: TButton;
DBNavigator1: TDBNavigator;
procedure bdeSbtnClick(Sender: TObject);
procedure bdeGbtnClick(Sender: TObject);
private
procedure IniOracleBlobField(Val: string);
public
{ Public declarations }
end;
var
Form1 : TForm1;
implementation
{$R *.dfm}
procedure TForm1.bdeSbtnClick(Sender: TObject);
var
KeyVal : string;
i : integer;
MS : TMemoryStream;
begin
Ms := TMemoryStream.Create();
db.StartTransaction;
for i := 1 to 10 do
with Table1 do
try
Randomize;
insert;
KeyVal := inttostr(random(100000));
FieldbyName('keyfield').AsString := KeyVal;
post;
IniOracleBlobField(KeyVal);
edit;
Ms.LoadFromFile('lady3_3.zip');
// Ms.SetSize(ms.Size + 1);
TBlobField(FieldbyName('blob_file')).LoadFromStream(ms);
post;
except
db.rollback;
Ms.Free;
abort;
end;
Ms.Free;
db.Commit;
end;
procedure TForm1.IniOracleBlobField(Val: string);
var
Query : TQuery;
begin
Query := TQuery.Create(self);
with Query do
begin
Sql.Clear;
Query.DatabaseName := 'leedb';
Sql.Add('UPDATE LEEBLOB Set BLOB_FILE=Empty_Blob() WHERE');
Sql.Add('KEYFIELD=:val');
Params[0].AsString := Val;
try
ExecSql;
except
ShowMessage('Blob域初始化错误');
end;
end;
end;
procedure TForm1.bdeGbtnClick(Sender: TObject);
begin
with table1 do
begin
TBlobField(FieldbyName('blob_file')).SaveToFile('bb.zip');
end;
end;
end.