我用delphi存储excel文件,以流方式存入,可取出时打不开。详情见下;(200分)

  • 主题发起人 主题发起人 PlayBoysjz
  • 开始时间 开始时间
P

PlayBoysjz

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:兄弟姐妹,望不吝赐教:

我以流方式存入:TBlobField (FieldByName('stream')).LoadFromFile (OpenDialog1.FileName);
其中我存入的是excel文件;没有问题。

可是我想把它再从数据库中取出,建一个临时文件,恢复原貌,应如何实现呀?
我试了试取出存为另外一个文件的方法:TBlobField (adoquery1.FieldByName('stream')).SaveToFile('f:/aaaa.xls');
可是这个新文件打不开,说文件格式不对。
用上面的方法,存储一个文本文件是没有问题的。
或者有没有其他更好的方法?
请高手给予指点,在下虽钱财不多,将清囊而赠!
 
请斑主关注一下,忙里抽空给指点一下。急用!谢谢。
 
代码贴的全一点, 估计是你的代码问题
 
我时这样存储的:
procedure TForm1.BitBtn4Click(Sender: TObject);
var
aBlob : TMemoryStream ;
begin
if OpenDialog1.Execute then
begin
With ADOQuery1 do
begin
ablob:=TMemoryStream.create;
if not Active then Open;
Append;
//aBlob := TADOBlobStream.Create(TBlobField(FieldByName('filestream')), bmWrite);
Try
aBlob.LoadFromFile(OpenDialog1.FileName);
TBlobField (FieldByName('stream')).LoadFromStream(ablob);
//TBlobField (FieldByName('stream')).LoadFromFile (OpenDialog1.FileName);
Finally
aBlob.Free;
end;
Post;
end;
end;
end;

然后我时这样取数据的:
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
TBlobField (adoquery1.FieldByName('stream')).SaveToFile('f:/aaaa.xls');
end;
而且:
我也这样试过:
var olestream:Tmemorystream;
olestream:=tmemorystream.create;
//olestream := TBlobStream.Create(TBlobField(ADOQuery1.FieldByName ('stream')), bmread);
TBlobField(adoquery1.FieldByName('filestream')).SaveToStream(OleStream);

不行。stream read error!
 
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
begin
SQL.Text := 'INSERT INTO TEST(A, B) VALUES(:A, :B)';
Parameters.ParamValues['A'] := 1;
Parameters.ParamByName('B').LoadFromFile('aaa.xls', ftBlob);
ExecSQL;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
with ADOQuery1 do
begin
SQL.Text := 'SELECT B FROM TEST WHERE A=1';
Open;
TBlobField(FieldByName('B')).SaveToFile('bbb.xls');
Close;
end;
end;
 
好的。楼上的朋友,我试试;

如果解决了,我想问以下,如果我换成 用Tclientdataset的三层结构,是否也可以呀?

 
to tseug:

你好,我按照您的方法试了。我试着存excel文件,我的后台数据库定义的字段是ntext型的,
抱错说“存储器不够”;我改成image;结果说"image not valid",请问该怎么办?
 
我在这儿用ACCESS数据库加上你的代码,没有任何问题。
估计是你用的数据库字段类型设置不正确。应设为BLOB类型。
 
你知道BLOB字段在sql server中是什么类型吗?
 
我用的就是SQL Server, Image类型就可以
 
to tseug:怎么我后台用image类型,总是出现‘bitmap image is not valid’的错误。

原代码如下:
procedure TForm1.BitBtn6Click(Sender: TObject);
begin
with ADOQuery1 do
begin
SQL.Text := 'INSERT INTO report(name, filestream) VALUES(:A, :B)';
Parameters.ParamValues['A'] := 'tester';
Parameters.ParamByName('B').LoadFromFile('f:/ddd.xlt', ftBlob);
ExecSQL;
end;
end;




procedure TForm1.BitBtn7Click(Sender: TObject);
begin
with ADOQuery1 do
begin
SQL.Text := 'SELECT * FROM report WHERE name='''+'tester'+'''';
Open;
TBlobField(FieldByName('filestream')).SaveToFile('aaa.xlt');
Close;
end;
end;
 
我有源码,要吗?
 
是不是你的Form上有DBGrid或者DBImage之类的?
 
to 飞雪轩主:能给我份源码吗?谢谢
我的信箱是:chinadragonsjz@163.com


to seug:我的窗体上有dbimage。
 
DBImage 只支持图片, 这里是XLS数据, 你不要把他和ADOQuery1连起来
 
to tseug:

好的,我试试。100分先送上。谢谢你!
 
接受答案了.
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部