就这么一个小问题,真没人可解决了! 一套题库管理系统,我的试题内容以Blob字段形式进行存储的,(其中包括文字和BMP图),如何把试卷打印出来? 用WORD或Fast Report都行,急,解决了立即结贴,感谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、通过文件流保存,这个你已经做到了2、通过OLEContain打开就行了3、可以通过扩展名区分不同的BOLB内容类型 先把它存到本地,然后调用ShellExecute 打开,然后打印 回星星农场大哥,我这是图与文字混在一起进行存储的,OLEContin如何操作呢? 这个是我以前的一个代码,你可以参考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中的操作。 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; HANK 很久没来CSDN了。。呵呵。 DBGrideh排序的问题!! 怎样做成office 2003风格的那种淡蓝色皮肤效果? 求购比较完善的DELPHI的网络验证注册冲值系统 Delphi可不可以调用VC++的lib,如果不行 BCB,行吗? DBDateTime控件在哪里可以找到? 谁知道dpw为扩展名的delphi文件是什么类型的文件? Delphi 5 Professional, Update Pack 1 到拿下在? Delphi怎么调用C++语言的dll 键的屏蔽 IP地址输入框是怎么做的? Form的析构问题 求助邮件的已读设置问题
2、通过OLEContain打开就行了
3、可以通过扩展名区分不同的BOLB内容类型
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中的操作。
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;