通过三层结构存取文件出了些问题,大家帮忙看看!
通过三层存取文件,存取都能够实现,但是存入后再取出来,文件就和源文件不一样了,比如一个10k的jpeg文件,经过一次存取后,就只有8.9k大小,而且图片打不开,可能是格式受到了破坏。请大家帮忙看看。
部分代码如下:
通过ClientDataset存:
aMemoryStream := TMemoryStream.Create;
aMemoryStream.LoadFromFile(OpenDialog1.FileName);
aMemoryStream.Seek(0,soFromBeginning);
strSql := 'INSERT INTO TEST(MYFILENAME, MYFILE, MYEXT) VALUES (:MYFILEname, :MYFILE, :MYEXT)';
SocketConnection1.Connected := false;
SocketConnection1.Connected := true;
ClientDataSet1.CommandText := strSql;
//ClientDataSet1.Params.CreateParam(ftString,'MYFILENAME', ptInput);
//ClientDataSet1.Params.CreateParam(ftBlob,'MYFILE', ptInput);
//ClientDataSet1.Params.CreateParam(ftString,'MYEXT', ptInput);
ClientDataSet1.Params.ParamByName('MYFILENAME').Value := OpenDialog1.FileName;
ClientDataSet1.Params.ParamByName('MYFILE').LoadFromStream(aMemoryStream,ftBlob);
ClientDataSet1.Params.ParamByName('MYEXT').Value := '.JPG';
ClientDataSet1.Execute;
aMemoryStream.Free;
通过ClientDataSet取:
strSql := 'Select * from TEST';
SocketConnection1.Connected := false;
SocketConnection1.Connected := true;
ClientDataSet1.Params.Clear;
ClientDataSet1.CommandText := strSql;
ClientDataSet1.Open;
ClientDataSet1.FetchBlobs;
aMemoryStream := TMemoryStream.Create;
//ClientDataSet1.Edit;
Caption := ClientDataSet1.FieldByName('MYFILENAME').AsString;
//aStream := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName('MYFILE'),bmReadWrite);
TBlobField(ClientDataSet1.FieldByName('MYFILE')).SaveToStream(aMemoryStream);
//ClientDataSet1.Post;
aMemoryStream.Position := 0;
aMemoryStream.SaveToFile('c:\test.jpg');
SocketConnection1.Connected := false;
aMemoryStream.Free;
机器环境为Win2k Prof. + SP3 + Delphi6 + Oracle 817i