请教高手,如何将WORD和EXCEL文档保存到SQL数据库里面?

解决方案 »

  1.   

    可以以流的形式存储.
    var
     ms: TMemoryStream;
    begin
      dst.active :=false;
      dst.commandtext :='';
      dst.active :=true;  ms := TMemoryStream.Create;
      ms.LoadFromFile(opendlg.filename);
      dst.append;
      (dst.FieldByName('Data') as TBlobField).LoadFromStream(ms);
      dst.post;//这是在access下的做法,在SQL中应该也差不多.
      

  2.   

    运行时老是提示 TBlobField没有定义不知何故,是不是要uses些什么才行,多谢楼上先.
      

  3.   

    用TBlobField(dst.FieldByName('picture')).LoadFromStream(fs);试试,我一般都是用access,SQL SERVER没试过.
      

  4.   

    var
      myfilestream:tfilestream;
      myblob:tblobfield;
      file_path:string;
    begin
    file_path:=opendlg1.filename;
    adoquery1.append;
    myfilestream:=tfilestream.Create(file_path,fmopenread);
    myblob:=tblobfield(adoquery1.FieldByName('字段名'));
    myblob.LoadFromStream(myfilestream);
    myfilestream.Free;
    end;
    adoquery1.Post;
    试试这样行不行,不行我也没办法了.
      

  5.   

    但编译时老时提示 TBlobField 没定义,不能通过,到底是如何回事呢?
    有点急,多谢楼上各位好汉先.
      

  6.   

    加了 uses adodb 了呵,但还是说 TBlobField没定义...
      

  7.   

    我是这么加的,任何文档都可以
     此代码应用到我给客户的一个的文档系统里的,仅作参考:procedure TF_Docadd.SpeedButton2Click(Sender: TObject);
    var i:integer;
     CURDOCNAME,NEWDOCNAME:STRING;
     tmpStream :TMemoryStream;
    begin
     tmpStream:=TMemoryStream.CREATE;
     gressbar(listview1.SelCount,'正在加入文件到数据库中...');
     FOR i:=0 to listview1.SelCount-1 DO
     BEGIN
      GRESSPOS(I);
      with datamd.ADOQ_doc do begin
          CURDOCNAME:=LISTVIEW1.Items.Item[I].CAPTION;
         ///压缩文档
         COMPRESSDOC(LISTVIEW1.Items.Item[I].SubItems.Strings[4]+CURDOCNAME,NEWDOCNAME);     tmpStream.CLEAR;
         tmpStream.Position:=0 ;
         tmpStream.LoadFromFile(NEWDOCNAME);//加载压缩后的文档
         sql.clear;
         sql.Add('insert into 文档内容 '+
          '(类别代码,文档类型,文档名称,文档大小,'+
          '文档创建时间,文档修改时间,作者,主题,关键字,文档内容,文档扩展名)' +
          ' values ' +
          '('+''''+datamd.SELECT_ID +''''+','+
          '' +''''+LISTVIEW1.Items.Item[I].SubItems.Strings[3]+''''+','+
          '' +''''+CURDOCNAME+''''+','+
          '' +''''+LISTVIEW1.Items.Item[I].SubItems.Strings[0]+''''+','+
          '' +''''+LISTVIEW1.Items.Item[I].SubItems.Strings[1]+''''+','+
          '' +''''+LISTVIEW1.Items.Item[I].SubItems.Strings[2]+''''+','+
          '' +''''+DATAMD.curuserid+''''+','+
          '' +''''+COPY(CURDOCNAME,1,POS('.',CURDOCNAME)-1)+''''+','+
          '' +''''+COPY(CURDOCNAME,1,POS('.',CURDOCNAME)-1)+''''+','+
          '' +':MY_DOC'+','+
          '' +''''+ ExtractFileExt(CURDOCNAME)+''''+''+
          ')' );
          Parameters.ParamByName('MY_DOC').LoadFromStream(tmpStream,ftBlob);
          //MEMO1.Lines.Add(SQL.Text);
         EXECSQL;
        
      end; END; GRESSRELEASE;
     TMPSTREAM.Free;
     LISTVIEW1.Items.Clear;
    end;
      

  8.   

    >> var
      myfilestream:tfilestream;
      myblob:tblobfield;
      file_path:string;
    begin
    file_path:=opendlg1.filename;
    adoquery1.append;
    myfilestream:=tfilestream.Create(file_path,fmopenread);
    myblob:=tblobfield(adoquery1.FieldByName('字段名'));
    myblob.LoadFromStream(myfilestream);
    myfilestream.Free;
    end;
    adoquery1.Post;
    试试这样行不行,不行我也没办法了.這個代碼我試了,可以保存
      

  9.   

    可能是你的数据库中没有定义blod或相关类型的字段吧。