opendialog本身只是选择一个文件,主要用它来返回要使用的文件的文件名(Dlg.FileName),至于如何打开文件和进行操作要自己写代码,打开Word文件的话,用
ShellExecute就行了

解决方案 »

  1.   

    再问一个问题:
       var
      ms:Tmemorystream;
    begin
      ms:=Tmemorystream.create;
      Query1.open;
      Query1.insert;
      Query1.filedbyname('field1').value:=...
      Query1.filedbyname('field2').value:=...
      OleContainer1.savetostream(ms);
      ms.position:=0;
      TBlobField(Query1.fieldbyname('存放文档的字段')).loadfromstream(ms);
      ms.free;
      Query1.post;
      Query1.applyupdates;
      
    end;写进数据库后;如何从数据库把它读出来???
      

  2.   

    呵呵,小小变通一下:
    TBlobField(Query1.fieldbyname('存放文档的字段')).savetostream(ms);
    ms.position:=0;
    OleContainer1.loadfromstream(ms);
    ms.free;
      
      

  3.   

    TO skimwater(掠水惊鸿) :
      报错了!说地址不对!!!
      

  4.   

    TO skimwater(掠水惊鸿) 
       给个例子!
      

  5.   


      var
      ms:Tmemorystream;
    begin
      ms:=Tmemorystream.create;
      Query1.open;
      Query1.first;
      TBlobField(Query1.fieldbyname('存放文档的字段')).savetostream(ms);
      ms.position:=0;
      OleContainer1.loadfromstream(ms);
      ms.free;
      
    end;  若OleContainer1里开始就有内容,想用OleContainer1.DestroyObject把它清除。
      

  6.   

    TO skimwater(掠水惊鸿) :
       运行后系统会报“STREAM READ ERROR”的错误!
      

  7.   

    很有可能是你的ms是空的。就是说你的ms没有从表里面读到数据。
      

  8.   

    procedure Tfrmdyqk1.Button1Click(Sender: TObject);
    var  stringstream:TStringStream;
    begin
                        StringStream := TStringStream.Create ('');
                        Memo1.Lines.SaveToStream (StringStream); //在这里创建一个字符流
                        StringStream.Position := 0;
                        with Query1.SQL do
                        begin
                            Clear;
                            Add ('insert into oadbo.bw_qwb (wjid,Wjdid,kzm,qw)'
                                + ' values (:a, 0, :b, :c)');
                        end;                    with Query1 do
                        begin
                            ParamByName ('a').asstring :=IntToStr(66666666);
                            ParamByName ('b').asstring := 'txt';
                            ParamByName ('c').asBlob := StringStream.DataString;  //就在这里赋值
                        end;
                        StringStream.Free; //用完了马上Free掉
                        Query1.ExecSQL; //开始插入记录
    end;procedure Tfrmdyqk1.Button2Click(Sender: TObject);
     var  strstream:Tmemorystream;
          //ls_qw:string;
    begin
        
        OleContainer1.DestroyObject;
        strstream := Tmemorystream.Create;    query1.Close;
        query1.sql.clear;
        query1.SQL.Add('select qw from oadbo.bw_qwb where wjid =' + inttostr(66666666));
        query1.open ;
        query1.First;
        
        strstream.position:=0;
        Tblobfield(query1.fieldbyname('qw')).savetostream(strstream);
        
        OleContainer1.loadfromstream(strstream);    strstream.free;
    end;
      

  9.   

    procedure Tfrmdyqk1.Button1Click(Sender: TObject);
    var  stringstream:TStringStream;
    begin
                        StringStream := TStringStream.Create ('');
                        OleContainer1.SaveToStream (StringStream); //在这里创建一个字符流
                        StringStream.Position := 0;
                        with Query1.SQL do
                        begin
                            Clear;
                            Add ('insert into oadbo.bw_qwb (wjid,Wjdid,kzm,qw)'
                                + ' values (:a, 0, :b, :c)');
                        end;                    with Query1 do
                        begin
                            ParamByName ('a').asstring :=IntToStr(66666666);
                            ParamByName ('b').asstring := 'txt';
                            ParamByName ('c').asBlob := StringStream.DataString;  //就在这里赋值
                        end;
                        StringStream.Free; //用完了马上Free掉
                        Query1.ExecSQL; //开始插入记录
    end;procedure Tfrmdyqk1.Button2Click(Sender: TObject);
     var  strstream:Tmemorystream;
          //ls_qw:string;
    begin
        
        OleContainer1.DestroyObject;
        strstream := Tmemorystream.Create;    query1.Close;
        query1.sql.clear;
        query1.SQL.Add('select qw from oadbo.bw_qwb where wjid =' + inttostr(66666666));
        query1.open ;
        query1.First;
        
        strstream.position:=0;
        Tblobfield(query1.fieldbyname('qw')).savetostream(strstream);
        
        OleContainer1.loadfromstream(strstream);    strstream.free;
    end;
      

  10.   

    ParamByName ('c').asBlob := StringStream.DataString;  这句赋值格式OleContainer
    不认识。下面一段:
      strstream.position:=0;
        Tblobfield(query1.fieldbyname('qw')).savetostream(strstream);
        OleContainer1.loadfromstream(strstream);应改为:Tblobfield(query1.fieldbyname('qw')).savetostream(strstream);strstream.position:=0;
    OleContainer1.loadfromstream(strstream);
        
        
        
      

  11.   

    TO skimwater(掠水惊鸿) :
      ParamByName ('c').asBlob := StringStream.DataString;  这句赋值格式OleContainer
    不认识。有没有介绍???
      

  12.   

    你用下面的方法来写入表:bw_qwb 
    var  ms:TMemoryStream;
    begin
      ms:= TMemoryStream.create;
      OleContainer1.SaveToStream (ms); 
      ms.Position := 0;
                 
      Query1.close;
      Query1.sql.clear;
      Query1.sql.text:='select *  from bw_qwb';
      Query1.open;
      Query1.append;
      Query1.fieldbyname('...').value:=...
      ...
      TBlobField(Query1.fieldbyname('qw')).loadfromstream(ms);
      ms.free;
      Query1.post;
      Query1.applyupdates;
      Query1.close;
    end;
      
      

  13.   

    TO skimwater(掠水惊鸿) :
      上述方法,数据库会包错!
      “cannot modify a read-only dataset”
      

  14.   

    TO skimwater(掠水惊鸿) :
       我按你说的方法还是不行,会报错!
      “cannot modify a read-only dataset”
       或
       “STREAM READ ERROR”!
      

  15.   

    将Query1的requestlive属性设为true;
      

  16.   

    TO skimwater(掠水惊鸿) :
      var  ms:TMemoryStream;
    begin
      ms:= TMemoryStream.create;
      OleContainer1.SaveToStream (ms); 
      ms.Position := 0;
                
      Query1.close;
      Query1.sql.clear;
      Query1.sql.text:='select *  from bw_qwb';
      Query1.open;
      Query1.append;
      Query1.fieldbyname('...').value:=...
      ...
      TBlobField(Query1.fieldbyname('qw')).loadfromstream(ms);
      ms.free;
      Query1.post;
      Query1.applyupdates;
      Query1.close;
    end; 没反映,也不报错,数据也没进数据库,怎么回事???
      
      

  17.   

    TO skimwater(掠水惊鸿) :
      
    又报错了!“query1.not in cached update mode”
      

  18.   

    TO skimwater(掠水惊鸿) :
      我换了一个服务器调WOED文档就就会报错:“服务器运行错误”指向:
      Olecontainer1.Doverb(ovShow);
      是否还要其他设置???