1、如何把word文档用流的办法保存在数据库中(就是我可以任意选择一个word文档把它保存到sql server 2000)
2、从数据库中怎么调出保存好的word文档,调出来后进行修改后又怎么保存回去
我这里有个做法,但老是行不通,我保存是以流的形式来保存,但老出问题,从数据库中调出来修改我的想法是以流的形式保存,然后显示在临时的word文档中进行修改后替换掉原来的文件,但我在具体实现我不知如何下手,请求各位大侠帮助,最好给个例子,那位大侠给出例子除了给这100分外我再开帖子给分!真的很急!!!

解决方案 »

  1.   

    我看了一篇文章,但还是不明白,我用的是ado,这篇文章里没有修改后保存
    http://www.powerba.com/develop/delphi/article/20000913008.htm
      

  2.   

    其实修改后保存的处理办法与你添加的处理方法是一样的呀,把你修改以后的WORD文档重新保存到你的数据库中就是了,这时候只是一个语句不一样呀,你用一个UPDATE语句代替原来的INSERT语句就可以了呀
      

  3.   

    用OleContainer就可以了,修改后自动保存到数据库里。
      

  4.   

    第二种方案是在库中以OLE格式保存数据。具体方法如下:
      本方案的不同之处,在于数据入库前先进行格式的转换。格式的转换是通过OLE控件完成的。即,先创建OLE对象,然后入库。示例代码如下:
    AOleContainer.CreateObjectFromFile(aFileName);
    AoleContainer.SaveToFile(tmpFileName);
    AblobField.LoadFromfile(tmpFileName);
      这样作的好处是,由于库中直接存储的是OLE格式,所以,在库与OLE控件之间的数据传递将非常方便。在这种情况下,可以通过文件直接传递:数据字段先将数据存到一个临时文件中,然后,OLE控件从临时文件中读取。即:
    AblobField.SaveToFile(aFileName);
    AOleContainer.LoadFromFile(aFileName);
    另外,还可以通过内存流来完成。使用内存流,可减少磁盘操作,大大提高运行效率。即:
    AblobField.SaveToStream(aStream);
    AOleContainer.LoadFromStream(aStream);
    下面是一个简单的例子。一个简单的例子
      本例中,采用Paradox数据库。库中有两个字段,一个是字符型,另一个是BLOB型。我们在主Form上放一个OLE控件用于编辑及转换数据。一个Table控件操作数据库。源代码如下:
    unit blob01;
    interface
    uses
     Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
     StdCtrls, Grids, DBGrids, Db, DBCtrls, OleCtnrs, DBTables, ExtCtrls;
    type
     TForm1 = class(TForm)
      Panel1: TPanel;
      Panel2: TPanel;
      Splitter1: TSplitter;
      Panel3: TPanel;
      Table1: TTable;
      OleContainer1: TOleContainer;
      DBNavigator1: TDBNavigator;
      DataSource1: TDataSource;
      DBGrid1: TDBGrid;
      OpenBtn: TButton;
      CloseBtn: TButton;
      OpenDialog1: TOpenDialog;
      LoadBtn: TButton;
      Table1Filename: TStringField;
      Table1ABlob: TBlobField;
      procedure OpenBtnClick(Sender: TObject);
      procedure CloseBtnClick(Sender: TObject);
      procedure LoadBtnClick(Sender: TObject);
      procedure Table1AfterScroll(DataSet: TDataSet);
    private
     { Private declarations }
    public
     { Public declarations }
    end; 
    var
     Form1: TForm1;implementation{$R *.DFM}procedure TForm1.OpenBtnClick(Sender: TObject);
    begin
      Table1.Open; //打开数据库
    end;procedure TForm1.CloseBtnClick(Sender: TObject);
    begin
      Table1.Close; //关闭数据库
    end;//打开一个数据文件、创建OLE对象、将对象数据存入数据库
    procedure TForm1.LoadBtnClick(Sender: TObject);
    var
    fn: string;
    begin
     if OpenDialog1.Execute then begin //打开文件
      fn := ExtractFileName(OpenDialog1.FileName);
      Table1FileName.AsString := fn;
      OleContainer1.CreateObjectFromFile(OpenDialog1.FileName, False); //创建OLE对象
      OleContainer1.SaveToFile("tmp"); //将OLE数据存入临时文件
      Table1ABlob.LoadFromFile("tmp"); //将OLE数据存入数据库
     end;
    end;//定义此方法用于显示当前记录中的OLE对象
    procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
    begin
     if not Table1ABlob.IsNull then begin
      Table1ABlob.SaveToFile("tmp"); //数据存入临时文件
      OleContainer1.LoadFromFile("tmp"); //从临时文件中读取OLE对象
     end;
    end;// 再写一个修改的吧
    procedure TForm1.Table1BeforeScroll(DataSet.TDataSet);
    begin
      if isDirty then //isDirty变量用来测试你的WORD文档是不是已经被修改
      begin
       OleContainer1.SaveToFile("tmp"); //将OLE数据存入临时文件
      Table1ABlob.LoadFromFile("tmp"); //将OLE数据存入数据库
     end;
    end.
      

  5.   

    问题1,可以用blob的方法,要下班了,下周一我给你写一个例子
      

  6.   

    hongqi162(失踪的月亮)
    用OleContainer就可以了同意