怎样向sql数据库中存储word或excel文档资料

解决方案 »

  1.   

    用BLOB类型word导入和导出
       uses IdGlobal;
        procedure TdjhyForm.SpeedButton2Click(Sender: TObject);
        var
        sfilename:string;
        function BlobContentTostring(const Filename:string):string;
        begin
          with Tfilestream.Create(filename,fmopenread)  do
          try
            setlength(result,size);
            read(pointer(result)^,size);
          finally
            free;
          end;
        end;
        begin
          if opendialog1.Execute then
          begin
            sfilename:=opendialog1.FileName;
            DataModule1.ADOQuery14.Edit;
            DataModule1.ADOQuery14.FieldByName('word').AsString:=blobcontenttostring(sfilename);
            DataModule1.ADOQuery14.Post;
          end;
        end;
        procedure TdjhyForm.SpeedButton1Click(Sender: TObject);
        var
        sfilename:string;
        bs:Tadoblobstream;
        begin
          bs:=Tadoblobstream.Create(TBLOBfield(DataModule1.ADOQuery14.FieldByName('word')),bmread);
          try
            sfilename:=extractfilepath(application.ExeName)+trim(DataModule1.adoquery14.fieldbyname('hybh').AsString);
            sfilename:=sfilename+'.'+'doc';
            bs.SaveToFile(sfilename);
            try
              djhyopenform:=Tdjhyopenform.Create(self);
              djhyopenform.olecontainer1.CreateObjectFromFile(sfilename,false);
              djhyopenform.OleContainer1.Iconic:=true;
              djhyopenform.ShowModal;
            finally
              djhyopenform.Free;
            end;
          finally
            bs.free;
          end;
        end;
      

  2.   

    纯SQL:  建立下面这个存储过程
    --------------------------------------------------
    CREATE PROCEDURE sp_textcopy 
      @srvname    varchar (30), 
      @login      varchar (30), 
      @password    varchar (30), 
      @dbname      varchar (30), 
      @tbname      varchar (30), 
      @colname    varchar (30), 
      @filename    varchar (30), 
      @whereclause varchar (40), 
      @direction  char(1) 
    AS 
    /* 这是使用textcopy工具将文件插入到数据库中,如果有前台工具可以用前台开发工具将文件插入,这里为了演示 */
    DECLARE @exec_str varchar (255) 
    SELECT @exec_str='textcopy /S '+@srvname+' /U '+@login+' /P '+@password+' /D '+@dbname+' /T'+@tbname+' /C '+@colname+' /W"'+@whereclause+'" /F"'+@filename+'" /'+@direction
    EXEC master..xp_cmdshell @exec_str
    ----------------------------------------------------insert dali values(1,0x,'doc','大力的doc') ---其中第二列是 0x 它是一个16进制数对应image列,是必须的,不要写null,第三列是文件类型,既扩展名sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\大力的doc.doc','where ID=1','I'
    -------依次参数是:实例名,用户名,密码,数据库名,表名,image列名,路径及文件名,条件(你必须保证它只选择一行),I
    ---------------------------------------------------------------------------------------------------------------------
    insert dali values(2,0x,'bmp','图片')
    sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\图片.bmp','where ID=2','I' --注意条件是 ID=2insert dali values(3,0x,'xls','Excel文件')
    sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\Excel文件.xls','where ID=3','I' --注意条件是 ID=3insert dali values(4,0x,'htm','网页')
    sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\网页.htm','where ID=4','I' --注意条件是 ID=4----------上面的语句,要保证类型一样,路径正确,条件唯一正确应该就可以了
      

  3.   

    那位可以给个例子
    [email protected]
      

  4.   

    那位可以给个例子
    [email protected]
      

  5.   

    ADOQuery1: TADOQuery;
        SaveDialog1: TSaveDialog;
        ExcelApplication1: TExcelApplication;
        ExcelWorkbook1: TExcelWorkbook;
        ExcelWorksheet1: TExcelWorksheet;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i,row:integer;
    begin
      if SaveDialog1.Execute then
      begin
        Screen.Cursor:=crHourGlass;
        ExcelApplication1.Connect;
        ExcelApplication1.Workbooks.Add(Null,0);
        ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]);
        ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet);
        if not adoQuery1.Active then
        begin
          adoQuery1.Open;
        end;
        for i:=0 to adoQuery1.Fields.Count-1 do
          ExcelWOrkSheet1.Cells.Item[1,i+1]:=adoQuery1.Fields[i].FieldName;
        row:=2;
        while not adoQuery1.Eof do
        begin
          for i:=0 to adoQuery1.Fields.Count-1 do
          begin
            ExcelWOrkSheet1.Cells.Item[row,i+1]:=adoQuery1.Fields[i].AsString;
          end;
          row:=row+1;
          adoQuery1.Next;
        end;
        ExcelWorkBook1.SaveCopyAs(SaveDialog1.FileName);
        ExcelWOrkBook1.Close(false);
        ExcelApplication1.Disconnect;
        ExcelApplication1.Quit;
        Screen.Cursor:=crDefault;
        Application.MessageBox('Export successfully!','Information',0);
      end;
    end;
      

  6.   

    up
    有没有实例啊
    我的为什么不能用
    那位可以发给我???
    [email protected]
      

  7.   

    tblodffie(adotable1.fieldbyanme('filename')).loadfromfile(filename);//Excelfile
    tblodffie(adotable1.fieldbyanme('filename')).loadfromfile(filename);//Wordfile;