发信人: lzrwj()
整理人: foxzz(2003-06-22 13:44:58), 站内信件
|
以下內容是轉載的:
简介在 VFP 6.0 中使用二进制备注字段存放文件并还原的一种方法
VFP 6.0 中用通用字段不能较好显示 JPG 格式等有关图片文件及 WORD 文档和 EXCEL 文件。经多次试验,本人找到一种较好的方法,并能较好实现显示有关文件。
实现原理:在 VFP 数据表的二进制备注字段或 SQL SERVER 数据库数据表的 Image 字段中存放文件的二进制数据,在需要显示文件时,将该二进制备注字段的内容转换成原格式文件并进行显示。
示例:
在 VFP 数据表建立一二进制备注字段 或 SQL SERVER 数据库的表上建立一 Image 字段,假设该字段名为: my_image
一、由文件导入字段(FtoM):
原理: 在备注字段的前128个字符内存放文件名(包括扩展名),从第129个字符起存放文件内容
使用函数: FILETOSTR()
Local my_file,my_text,my_memo
my_file=UPPER(GETFILE())
If EMPTY(my_file)
Retu
Endif
Wait WIND " 正在导入文件,请稍候... " NOWAIT
my_memo=PADR(JUSTFNAME(my_file),128," ")+FILETOSTR(my_file)
Repl my_image WITH my_memo
Wait CLEAR
Messagebox(CHR(13)+"文件导入成功,导入的文件为: "+CHR(13)+CHR(13)+my_file,64,"文件导入成功")
二、由字段内容还原为文件(MtoF):
原理:取出文件名,并将从第129个字符起的文件内容还原成原格式文件
使用函数: STRTOFILE()
Local my_memo
If LEN(my_image) <= 128 OR ISNULL(my_image) OR EMPTY(my_image)
Messagebox("该记录内无文件内容! ",64,"信息")
Retu
Endif
my_file=ALLT(LEFT(my_image,128))
my_text=JUSTEXT(ALLT(LEFT(my_image,128)))
my_file=PUTFILE("另存为",my_file,my_text)
If EMPTY(my_file)
Retu
Endif
Wait WIND " 正在还原文件,请稍候... " NOWAIT
=STRTOFILE(SUBST(my_image,129),my_file,.F.)
Wait CLEAR
Messagebox(CHR(13)+"文件还原成功,存放位置: "+CHR(13)+CHR(13)+my_file,64,"还原文件成功")
三、常见的几种格式文件显示。
假设被还原的文件名存为变量 my_file
(一)、BMP 、 JPG 、GIF 文件
方法1:表单中增加 Image 控件 Image1
显示控件:Image
If !empty(my_file) or !isnull(my_file)
Thisform.Image1.picture=my_file
Thisform.Image1.visible=.T.
Else
Thisform.Image1.picture=""
Thisform.Image1.visible=.F.
Endif
方法2:在浏览器中显示
使用函数: STRTOFILE()
使用控件: Hyperlink
Local htm_name,my_html,my_title
htm_name=subst(my_file,1,at(".",my_file)-1)+".htm"
my_title="图 片 资 料"
my_html=my_html+"<html>"+chr(13)+"<head>"
If file(my_file)
my_pic=strtran(my_file,"\","/")
my_html=my_html+chr(13)+"<p align="center"><img border="0" src="file:///"+my_file;
+" align="middle"></p>"
Endif
my_html=my_html+chr(13)+"</body>"+chr(13)+"</html>"
=strtofile(my_html,htm_name,.F.)
Release my_html
Local lcURL
lcURL=ALLTRIM(htm_name)
If NOT LOWER(LEFT(lcURL,5))=="http:" AND NOT LOWER(LEFT(lcURL,5))=="file:" AND ;
(LOWER(LEFT(lcURL,4))=="www." OR ;
INLIST(LOWER(RIGHT(lcURL,4)),".com",".gov",".net") OR ;
(NOT SUBSTR(lcURL,2,1)==":" AND NOT LEFT(lcURL,2)=="\\"))
lcURL="http://";+lcURL
Endif
If SUBSTR(PADR(lcURL,5),5,1)==":"
lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")
Else
lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
Endif
Thisform.Hyperlink1.navigateto(lcURL) &&表单中加VFP超级链接类 Hyperlink
(二)、DOC 、 RTF 、TXT 文件
方法1:在 WORD 中显示
** 建立 Word.application
oWord=CREATEOBJECT("Word.application")
oDoc=oWord.Documents
oDoc.Open(my_file)
oWord.visible=.T.
方法2:在 浏览器中显示
使用控件: Hyperlink
Local lcURL
lcURL=ALLTRIM(my_file)
If NOT LOWER(LEFT(lcURL,5))=="http:" AND NOT LOWER(LEFT(lcURL,5))=="file:" AND ;
(LOWER(LEFT(lcURL,4))=="www." OR ;
INLIST(LOWER(RIGHT(lcURL,4)),".com",".gov",".net") OR ;
(NOT SUBSTR(lcURL,2,1)==":" AND NOT LEFT(lcURL,2)=="\\"))
lcURL="http://";+lcURL
Endif
If SUBSTR(PADR(lcURL,5),5,1)==":"
lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")
Else
lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
Endif
Thisform.Hyperlink1.navigateto(lcURL) &&表单中加VFP超级链接类 Hyperlink
(三)、XLS 文件
方法1:在 EXCEL 中显示
OleApp=CREATEOBJECT("Excel.Application") && 打开EXCEL,产生OLE对象
OleApp.Application.Caption="资料" && 指定标题栏名称
OleApp.Application.WorkBooks.Open(my_file) && 打开EXCEL工作簿
OleApp.Application.Visible=.T. && 置EXCEL可见
方法2:在 浏览器中显示
使用控件: Hyperlink
Local lcURL
lcURL=ALLTRIM(my_file)
If NOT LOWER(LEFT(lcURL,5))=="http:" AND NOT LOWER(LEFT(lcURL,5))=="file:" AND ;
(LOWER(LEFT(lcURL,4))=="www." OR ;
INLIST(LOWER(RIGHT(lcURL,4)),".com",".gov",".net") OR ;
(NOT SUBSTR(lcURL,2,1)==":" AND NOT LEFT(lcURL,2)=="\\"))
lcURL="http://";+lcURL
Endif
If SUBSTR(PADR(lcURL,5),5,1)==":"
lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")
Else
lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
Endif
Thisform.Hyperlink1.navigateto(lcURL) &&表单中加VFP超级链接类 Hyperlink
(四)、HTM 文件
在 浏览器中显示
使用控件: Hyperlink
lcURL=ALLTRIM(my_file)
If NOT LOWER(LEFT(lcURL,5))=="http:" AND NOT LOWER(LEFT(lcURL,5))=="file:" AND ;
(LOWER(LEFT(lcURL,4))=="www." OR ;
INLIST(LOWER(RIGHT(lcURL,4)),".com",".gov",".net") OR ;
(NOT SUBSTR(lcURL,2,1)==":" AND NOT LEFT(lcURL,2)=="\\"))
lcURL="http://";+lcURL
Endif
If SUBSTR(PADR(lcURL,5),5,1)==":"
lcURL=STRTRAN(STRTRAN(lcURl,"\","/"),"///","//")
Else
lcURL="file://"+STRTRAN(STRTRAN(STRTRAN(lcURL,"\","/"),"///","//"),"//","/")
Endif
Thisform.Hyperlink1.navigateto(lcURL) &&表单中加VFP超级链接类 Hyperlink
用上述方法,我成功解决了收发文、档案管理系统中全文的显示和存储。
当然,在 VFP 中也可以用 VFP 的控件类 _webbrowser4 进行显示,缺点是打印等有关功能实现较差。
|
|