从BLOB文件Delphi XE2读取msword [英] Reading msword from blob file Delphi xe2
本文介绍了从BLOB文件Delphi XE2读取msword的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在从包含mword文件的数据库中读取BLOB字段并将其保存到文件(.doc/.docx)时遇到问题。什么是Moree这在Delphi 2010中很有效,但在Delphi XE2中保存的文件无效。这是我的代码
dane.SQLtmp.Close;
dane.SQLtmp.SQL.Clear;
dane.SQLtmp.SQL.Add('select wydruk,typ,IdWydruku from wydruki where nazwa=:d0');
dane.SQLtmp.Params[0].AsString:=name;
dane.SQLtmp.Open;
if dane.SQLtmp.RecordCount> 0 then
begin
t:=TMemoryStream.Create;
t.Position:=0;
TblobField(dane.sqltmp.FieldByName('wydruk')).saveToStream(T);
T.SaveToFile('C:FILE'+filetpe);
t.Free;
end;
将文件保存到数据库:
dane.SQLtmp.Close;
dane.SQLtmp.SQL.Clear;
dane.SQLtmp.SQL.Add('insert into Wydruki (Nazwa,Operator,wydruk,opis,typ,rodzaj,podmiot,typsplaty,grupa,podgrupa)');
dane.Sqltmp.SQL.Add('VALUES (:d0,:d1,:d2,:d3,:d4,:d5,:d6,:d7,:d8,:d9)');
dane.SQLtmp.Params[0].AsString:=NazwaPliku; //File name
dane.SQLtmp.Params[1].AsInteger:=glowny.ID_operator;
t:=TMemoryStream.Create;
t.Position:=0;
t.LoadFromFile(OpenFile.FileName);
t.Position:=0;
dane.sqltmp.Params[2].LoadFromStream(t,ftBlob);
dane.SQLtmp.Params[3].AsString:=opis;
dane.SQLtmp.Params[4].AsString:=typ; // file type
// .
// .
// .
dane.SQLtmp.ExecSQL;
在Delphi 2010中,它奏效了...:/
推荐答案
您需要使用TBlobField.CreateBlobStream
并复制到TFileStream
。
调用CreateBlobStream获取一个流,用于读写由Field参数指定的字段的值。模式参数指示流是否将用于读取字段值(BmRead)、写入字段值(BmWrite)或修改字段值(BmReadWite)。
同一文档页面上的提示写着:
提示:最好调用CreateBlobStream,而不是直接在代码中创建BLOB流。这可确保流适合于数据集,还可确保不总是在内存中存储Blob数据的数据集在创建流之前获取Blob数据。
基于以上内容的示例代码:
var
Blob: TStream;
Strm: TFileStream;
BlobFld: TBlobField;
begin
dane.SQLtmp.SQL.Text := 'select wydruk,typ,IdWydruku from wydruki where nazwa=:d0';
dane.SQLtmp.Params[0].AsString:=name;
dane.SQLtmp.Open;
BlobFld := dane.SQLtmp.FieldByName('wydruk') as TBlobField;
Blob := dane.SQLtmp.CreateBlobStream(BlobFld, bmRead);
try
Strm := TFileStream.Create('C:FILE' + filetpe, fmCreate);
try
Strm.CopyFrom(Blob, Blob.Size);
finally
Strm.Free;
end;
finally
Blob.Free;
end;
end;
这篇关于从BLOB文件Delphi XE2读取msword的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文