一套题库管理系统,我的试题内容以Blob字段形式进行存储的,(其中包括文字和BMP图),如何把试卷打印出来? 用WORD或Fast  Report都行,急,解决了立即结贴,感谢!!

解决方案 »

  1.   

    1、通过文件流保存,这个你已经做到了
    2、通过OLEContain打开就行了
    3、可以通过扩展名区分不同的BOLB内容类型
      

  2.   

    先把它存到本地,然后调用ShellExecute 打开,然后打印
      

  3.   

    回星星农场大哥,我这是图与文字混在一起进行存储的,OLEContin如何操作呢?
      

  4.   

    这个是我以前的一个代码,你可以参考procedure TLeadingForm.BtnSaveClick(Sender: TObject);
    var
      ADOConn: TADOConnection;
      ADOQury: TADOQuery;
      Stream: TStream;
    begin
      ADOConn:=TADOConnection.Create(Self);
      try
        ADOConn.ConnectionString:='Provider=SQLOLEDB.1;Password=2038;'
                                 +'Persist Security Info=True;User ID=sa;'
                                 +'Initial Catalog=OLEContain;Data Source=CNITHDZ';
        ADOConn.LoginPrompt:=False;
        ADOConn.Connected:=True;
        if ADOConn.Connected then
        begin
          ADOQury:=TADOQuery.Create(Self);
          try
            ADOQury.Connection:=ADOConn;
            ADOQury.SQL.Add('SELECT * FROM DOCUMENTFILE ORDER BY IDNO');
            ADOQury.Open;
            ADOQury.Insert;
            ADOQury.FieldByName('FILEIDNO').AsString:='0001';
            Stream:=ADOQury.CreateBlobStream(ADOQury.FieldByName('FILEBODY'), bmWrite);
            try
              OleContainer.SaveToStream(Stream);
            finally
              Stream.Free;
            end;
            ADOQury.Post;
          finally
            ADOQury.Close;
            ADOQury.Free;
          end;
        end;
      finally
        ADOConn.Close;
        ADOConn.Free;
      end;
    end;procedure TLeadingForm.BtnEditClick(Sender: TObject);
    begin
    ////
    end;procedure TLeadingForm.BtnViewClick(Sender: TObject);
    var
      ADOConn: TADOConnection;
      ADOQury: TADOQuery;
      Stream: TStream;
    begin
      ADOConn:=TADOConnection.Create(Self);
      try
        ADOConn.ConnectionString:='Provider=SQLOLEDB.1;Password=2038;'
                                 +'Persist Security Info=True;User ID=sa;'
                                 +'Initial Catalog=Niekn;Data Source=CNITHDZ';
        ADOConn.LoginPrompt:=False;
        ADOConn.Connected:=True;
        if ADOConn.Connected then
        begin
          ADOQury:=TADOQuery.Create(Self);
          try
            ADOQury.Connection:=ADOConn;
            ADOQury.SQL.Add('SELECT * FROM DOCUMENTFILE ORDER BY IDNO');
            ADOQury.Open;
            ADOQury.Last;
            Stream:=ADOQury.CreateBlobStream(ADOQury.FieldByName('FILEBODY'), bmRead);
            try
              OleContainer.LoadFromStream(Stream);
            finally
              Stream.Free;
            end;
            OleContainer.DoVerb(ovPrimary);
          finally
            ADOQury.Close;
            ADOQury.Free;
          end;
        end;
      finally
        ADOConn.Close;
        ADOConn.Free;
      end;
    end;说白了,通过OLEContain打开就行了,当然,如果你的BOLB字段保存的是WORD、EXCEL等你要安装OFFICE,如果是BMP图片,系统中要有打开图片的程序,然后通过VBA调用打印即可,WORD的直接打印即可,具体操作基本同OFFICE中的操作。
      

  5.   

    type
      TLeadingForm = class(TForm)
        CB: TCoolBar;
        TBTool: TToolBar;
        BtnNew: TToolButton;
        BtnOpen: TToolButton;
        BtnSave: TToolButton;
        BtnEdit: TToolButton;
        BtnView: TToolButton;
        BtnPrint: TToolButton;
        BtnCls: TToolButton;
        ImageList1: TImageList;
        Back: TPanel;
        Head: TPanel;
        EditText: TEdit;
        OleContainer: TOleContainer;
        Status: TStatusBar;
        procedure FormCreate(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure BtnNewClick(Sender: TObject);
        procedure BtnOpenClick(Sender: TObject);
        procedure BtnSaveClick(Sender: TObject);
        procedure BtnEditClick(Sender: TObject);
        procedure BtnViewClick(Sender: TObject);
        procedure BtnPrintClick(Sender: TObject);
        procedure BtnClsClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      

  6.   

    HANK 很久没来CSDN了。。呵呵。