Q qby Unregistered / Unconfirmed GUEST, unregistred user! 2009-03-24 #1 我想把几个word文档模板(*.dot)放在DLL中,以便在根据模板生成工作文档时,随时从该DLL中读取出来进行操作。大家能不能一起谈谈思路,或者还有其它更好、更方便的方法,比如将模板放在数据库中。谢谢!
我想把几个word文档模板(*.dot)放在DLL中,以便在根据模板生成工作文档时,随时从该DLL中读取出来进行操作。大家能不能一起谈谈思路,或者还有其它更好、更方便的方法,比如将模板放在数据库中。谢谢!
Z znxia Unregistered / Unconfirmed GUEST, unregistred user! 2009-03-24 #2 放数据库比放在DLL中要好,毕竟客户可能随时需要更改WORD格式,你纵不能随时为他们编译DLL程序吧。不过我以前用的是CELL做各类发票、报表模板的,在CELL上进行了再次封装,把所有SQL都封装在Cell文件中,调用的时候,只需要执行3个函数:a打开指定CELL文件,B传递sql参数(如个人ID),c预览CELL。程序中,不需要考虑CELL格式和如何获取数据并显示的。对应Cell文件的格式设计,是通过另外一个程序完成的。
放数据库比放在DLL中要好,毕竟客户可能随时需要更改WORD格式,你纵不能随时为他们编译DLL程序吧。不过我以前用的是CELL做各类发票、报表模板的,在CELL上进行了再次封装,把所有SQL都封装在Cell文件中,调用的时候,只需要执行3个函数:a打开指定CELL文件,B传递sql参数(如个人ID),c预览CELL。程序中,不需要考虑CELL格式和如何获取数据并显示的。对应Cell文件的格式设计,是通过另外一个程序完成的。
Q qby Unregistered / Unconfirmed GUEST, unregistred user! 2009-03-25 #3 znxia你好,我使用你的方法,将doc文件放在数据库中(absolute database),然后用TFileStream读出来,并保存在硬盘上,之后再利用CreateOLEObject方式对这个doc文件进行处理,都没有问题。但是这里我有个困惑就是:读出文件并保存在硬盘上时,马上就打开这个文件进行处理,但如果这个文件太大了,还没有完全保存在硬盘上(不知有没有可能),就对其进行处理,会出错吧?不知对不对?
znxia你好,我使用你的方法,将doc文件放在数据库中(absolute database),然后用TFileStream读出来,并保存在硬盘上,之后再利用CreateOLEObject方式对这个doc文件进行处理,都没有问题。但是这里我有个困惑就是:读出文件并保存在硬盘上时,马上就打开这个文件进行处理,但如果这个文件太大了,还没有完全保存在硬盘上(不知有没有可能),就对其进行处理,会出错吧?不知对不对?
Z znxia Unregistered / Unconfirmed GUEST, unregistred user! 2009-03-25 #4 不清楚你是怎么保存的,因为我想象不出来文件还没完全保存到硬盘上你就可以通过OLE对它进行操作,除非你用多线程来操作,一个线程在保存文件,另外一个线程是发现了文件名称就立刻处理,不管该文件是否处于占用状态。
不清楚你是怎么保存的,因为我想象不出来文件还没完全保存到硬盘上你就可以通过OLE对它进行操作,除非你用多线程来操作,一个线程在保存文件,另外一个线程是发现了文件名称就立刻处理,不管该文件是否处于占用状态。
Q qby Unregistered / Unconfirmed GUEST, unregistred user! 2009-03-25 #5 可能我没说清楚,我的意思是在使用TFileStream从数据库中读取doc文件时,当执行TFileStream.free时,程序才在硬盘上生成这个doc文件,那么会不会出现这种情况,当文件还在往硬盘上保存时,即TFileStream.free语句还没有完全执行完毕,TFileStream.free语句后面的程序(如:CreateOLEObject等语句)就开始执行了,有这种可能吗?
可能我没说清楚,我的意思是在使用TFileStream从数据库中读取doc文件时,当执行TFileStream.free时,程序才在硬盘上生成这个doc文件,那么会不会出现这种情况,当文件还在往硬盘上保存时,即TFileStream.free语句还没有完全执行完毕,TFileStream.free语句后面的程序(如:CreateOLEObject等语句)就开始执行了,有这种可能吗?
Q qby Unregistered / Unconfirmed GUEST, unregistred user! 2009-03-25 #6 或者我换个方式表达意思:即:从数据库中读Word文件,一般都是先将文件从数据库读出写入硬盘的某个文件中再用Word打开,能否不经过这个中间文件,从数据库读出文件后直接打开,关闭Word后直接将修改结果回存到数据库中?
或者我换个方式表达意思:即:从数据库中读Word文件,一般都是先将文件从数据库读出写入硬盘的某个文件中再用Word打开,能否不经过这个中间文件,从数据库读出文件后直接打开,关闭Word后直接将修改结果回存到数据库中?
Z znxia Unregistered / Unconfirmed GUEST, unregistred user! 2009-03-25 #7 当文件还在往硬盘上保存时,即TFileStream.free语句还没有完全执行完毕,TFileStream.free语句后面的程序(如:CreateOLEObject等语句)就开始执行了,有这种可能吗?--------不会的,请放心。----------能否不经过这个中间文件,从数据库读出文件后直接打开。--->没细看Delphi里面的OLE是否可以对流进行操作,如果不能,那就不可以。
当文件还在往硬盘上保存时,即TFileStream.free语句还没有完全执行完毕,TFileStream.free语句后面的程序(如:CreateOLEObject等语句)就开始执行了,有这种可能吗?--------不会的,请放心。----------能否不经过这个中间文件,从数据库读出文件后直接打开。--->没细看Delphi里面的OLE是否可以对流进行操作,如果不能,那就不可以。