从BLOB文件Delphi XE2读取msword [英] Reading msword from blob file Delphi xe2

查看:0
本文介绍了从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

根据documentation

调用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆