使用TBlobField遇到的问题(100分)

  • 主题发起人 主题发起人 Jams
  • 开始时间 开始时间
TBlobField.SaveToStream(OleStream);???????

搞清楚类的输出方法和对象实例方法的区别就知道错在哪了.

类的输出方法(不需要对象实例就能直接使用)好象只有一个Create.

TBlobField是个类, 所以它没有SaveToStream方法
但是一个TBlobField的实例, 比如 myfield := TBlobField.Create(...);
myfield就有SaveToStream了.
 
to Another_eYes
本人依据茶叶蛋的方法解决了对此的部分问题,现在关键的是TBlob如何才能到
Word中。
提示一下,对于String,可以:
Var
MsWord: Variant;

Begin
MsWord := CreateOleObject('Word.Basic');
MsWord.FileNew;
MsWord.AppShow;
MsWord.Insert('Hello!');
End;

现在有无MsWord.InsertObject之类的语句可以将TBlob字段的内容以对象的方式
插入到Word中(新建一对象).
请依此作答!
 
to taoqg:
你的办法也是对于String的。请看上面的问题,如何做?
 
你的blob的存储过程我不知道,怎么告诉你load的过程呢?
如果你的blob内容可以转入剪贴板,你可以粘贴.
MsWord.AppShow;
MsWord.EditPaste;
不行的话,你应该详细描述你的'非图像文件、非文档文件'的blob内容,没有一种通用
方法可以调入,只能分解.
 
快答,我要去睡了.{:{
 
Ole粘贴是否比较复杂?书上说的!
 
已经粘贴了,复杂什么?
 
to menxin
帖在哪儿?
 
我的意思是将你的blob内容转入剪贴板,然后用 MsWord.EditPaste 粘贴.
 
to menxin
Olecontainer没有粘贴的方法,你是指TBlobField的粘贴,还是指TBlobStream的
粘贴功能?能否给个实例指点一下?
 
如果只是将Tolecontainer的内容粘贴,就用
Tolecontainer的Copy方法就行了,

此外:我在我机器上用的
TBlobField(table1.fieldbyname('a')).SaveToStream(Blobstream);
报了"Blob Not Opened“的错误,是为什么?

 
to Sand
关于你的错误信息,我认为字段a应指定为Blob型,才能使用!
至于Tolecontainer的Copy方法,能否问一下,再接下来如何从
Word中将你说的粘贴的内容读出来呢?(非String方式)
 
To Jims
我的问题我知道怎么回事了,就是我的Blob字段内存的是
Doc文件,并不是开始就用Tolecontainer写进去的,所以
用TMemorystream say "stream format error".不知道
Doc文件和TOlecontainer存储的差别是什么?如果用的是
Tblobstream,就有"blob not opened的问题。

在Word里可以用 .EditPaste 来连贴。可是我用
Tolecontainer的Copy方法时总是说我的内存和硬盘空间
不够。所以没法试验这个方法的正确性。

另外请教,我在Tolecontainer的Createobjectfromfile(filename)
的时候,如果要打开的文件有宏病毒,那么会有个提示信息,
怎么屏蔽掉它啊?因为如果选择NO,那么就会出现“命令错误”
之类的提示,必须重新运行程序才能重新用Olecontainer,
很是麻烦。






 
我看越讨论越糊涂.
你的文字、公式和图形是存在一个字段中的吗?是否可以分解为文本+图形?是否可以支
持copytoclipboard?
blob无非就是二进制文件,savetostream后按相应格式读出写入word,不会有什么问题啊!?
 
to menxin
有何糊涂!这是用户要求的:每个专业、每门课就一个文件名,虽然数据库是大了点,
但好管理,比起那乱糟糟的一堆*.doc、*.bmp等的文件简单多了,况且总不能
一个上标就一个文件吧!用户是上帝!
 
to Sand
对于宏病毒有两种情况,1、检查Word的宏中有无以Auto开头的宏命令,若有,用
杀毒软件去除之;2、若无,且是因你的操作引起的,检查一下你的命令中是否用了
自动宏,若无,则放心大胆地去用。
另请教:
Tolecontainer的Createobjectfromfile(filename)如何用,其中FileName是
指*.Doc文档吗?若是,用OleContainer1.SaveToFile('c:/jj.doc')和
OleContainer1.SaveAsDocument('c:/jj1.doc');产生的文件是否是FileName的
内容。jj和jj1的格式是不相同的。况且如直接启动Word,调入jj.doc和jj1.doc
均不能显示正常文档,而是Word文档的Txt版。如何解决?

此外,用OleContainer1.DoVeb(ovOpen);可正常显示TBlob字段的内容,如何用
程序全选文档的内容,又如何弄到粘贴板上呢?请指教!
 
To Menxin
你有SQl的基础教程/材料的电子版吗?请email一份如何,此外好结束有关的问题
呢?那个问题就等你的回答了!
我的问题你再研究研究(非烟酒烟酒,我们离得太远!是吧?)
 
to jims:
Tolecontainer的Createobjectfromfile(filename)如何用,其中
FileName是指*.Doc文档.
若是,用OleContainer1.SaveToFile('c:/jj.doc')产生的文件不是FileName的
内容。OleContainer1.SaveAsDocument('c:/jj1.doc')产生的文件好象是吧,至少
我又试了几次,saveasdocument后还可以createobjectfromfile(),也可以启动Word直接看,效果是一样的。

我现在还不知道怎么将Olecontainer里的内容copyto clipboard,
我现在只是Copy了这个Olecontainer所包含的对象,//sigh
到了word里还是象Insert an object 而不是 Insert file;


 
to Sand
"我现在只是Copy了这个Olecontainer所包含的对象,到了word里还是
象Insert an object 而不是 Insert file;"
对于此,本人较感兴趣!就是说你已能将OleContainer的东西Copy了,而且在Word
里用Insert and Object实现了你Copy的内容?!
若确如此,请告知如何实现的?我这咋没Copy的方法呢?

还有,我刚装了D4, MsWord := CoApplication_.Create;咋不认?
 
程序是这样的:
var
DataObject: IDataObject;
Foleobject:IoleObject;
MsWord: Variant;
Begin
Foleobject:=ole1.OleObjectInterface;
FOleObject.QueryInterface(IDataObject, DataObject);
if DataObject = nil then
begin
exit;
end;
OleSetClipboard(dataobject);//放到剪贴板
MsWord := CreateOleObject('Word.Basic');
MsWord.FileNew;
Msword.APpshow;
MsWord.Insert('Hello!');
Msword.EditPaste; //粘贴到剪贴板
Msword.Appclose;

可是这样的办法没法加题号等,而且生成的试卷不好排版。
(听说你是做试题库的,//xixi)

另外在uses里要加点东西,否则编译不通过。
我的uses是
uses Windows, Messages, CommCtrl, ActiveX, OleDlg, SysUtils, Classes,
Controls, Forms, Menus, Graphics, ComObj, Db, DBTables, OleCtnrs,
StdCtrls,clipbrd,sconnect,printers;

不过有不少是没有用的。
 
后退
顶部