发信人: 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 进行显示,缺点是打印等有关功能实现较差。
 
  | 
 
 
 |