怎么在asp里面把保存在dbf通用字段里的doc文档读出来?

kpingcsdn 2006-06-06 04:21:06
怎么在asp里面把保存在dbf通用字段里的doc文档读出来?
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kpingcsdn 2006-06-16
  • 打赏
  • 举报
回复
根据 apple_8180(十豆三) 提供的例子已解决,感谢!
kpingcsdn 2006-06-08
  • 打赏
  • 举报
回复
就是显示,“OLE绑定型控件”有没有现成的,foxpro我不会写:)
PS:表中有好几个通用型字段。
huijcbit 2006-06-07
  • 打赏
  • 举报
回复
学习
十月鹰飞 2006-06-07
  • 打赏
  • 举报
回复
受教了,学习。。
如果只是显示,OLE绑定型控件应该足够了。
十豆三 2006-06-06
  • 打赏
  • 举报
回复
转帖VFP中方法,请参考:

通用型(G)字段里的文件还原

*----------------------------------

* ---------------------------------------------------------
* 测试代码
* ---------------------------------------------------------
CLEAR
SET TALK OFF
SET SAFETY OFF
IF !USED([TBac023])
USE C:\Temp\Abc.DBF IN 0 ALIAS TAbc
ENDIF
SELECT TAbc
SCAN
lcFileName = JUSTFNAME(ALLTRIM(文件名称))
? lcFileName, GenToFile( [文件内容], [C:\Temp\Files\]+lcFileName )
ENDSCAN
USE IN TAbc
RETURN

* ---------------------------------------------------------
* 函数: 将当前表的当前记录的某通用型(G)字段里的文件还原
* 参数: tcGenField 通用型字段名
* tcFileName 还原的文件名
* 设计: 红雨、梦幻幻影
* ---------------------------------------------------------
FUNCTION GenToFile( tcGenField, tcFileName )
LOCAL IsOK, lcAlias, lnRecn
IsOK = .F.
lcAlias = ALIAS()
IF !EMPTY(lcAlias) ;
AND TYPE([tcGenField])=[C] AND TYPE([tcFileName])=[C] ;
AND !EMPTY(tcGenField) AND !EMPTY(tcFileName) ;
AND TYPE(tcGenField)=[G] AND TRANSFORM(&tcGenField.)=[Gen]
lnRecn = RECNO()
lcTemp = ADDBS(SYS(2023)) + [T]+SYS(2015)
COPY TO (lcTemp) FIELDS (tcGenField) FOR RECNO()=lnRecn
IF FILE(lcTemp+[.dbf]) AND FILE(lcTemp+[.fpt])
DELETE FILE (lcTemp+[.dbf])
IF FILE(tcFileName)
DELETE FILE (tcFileName)
ENDIF
RENAME (lcTemp+[.fpt]) TO (tcFileName)
IsOK = FILE(tcFileName)
ENDIF
SELECT (lcAlias)
GO lnRecn
ENDIF
RETURN IsOK
ENDFUNC

十豆三 2006-06-06
  • 打赏
  • 举报
回复
转帖VFP中方法,请参考:

提取.DBF中通用字段中的一个图片或文件(.BMP,.DOC,.GIF或.JPG文件)

*----------------------------------------------------------------

*--复制 .DBF 通用字段内容到一个.BMP,.DOC,.GIF 或 .JPG 文件,
*--切去由 APPEND GENERAL 命令添加的所有的头和尾部信息.
*--调用方法 =gentofil(字段名,表名)

&& parameters lcfieldname,lcfilename

*****************************************************************************
******************************************************************************
*-- 要运行该示例,将 VFP 示例表 employee.dbf, employee.fpt, employee.cdx
*-- 复制到该文件所在目录, 并将该目录设置为默认目录. 然后在命令窗口打入:
*-- do gentofil
*-- 这样,该示例程序将根据通用字段内容的属性.把在当前 employee 表中第一条记录的通用字段 photo 中的内容
*-- 复制到一个 employee.bmp/employee.doc/employee.jpg/employee.gif 文件中。
******************************************************************************
******************************************************************************
lcfieldname = "photo"
lcfilename = "employee"
SET DEFA TO c:\copygen
LOCAL lccompatible,lcextension,liendoffset,;
lctempfile,lihandelin,lihandleout,lisize,llsuccess
lccompatible=SET("COMPATIBLE") && 保存 "Compatible" 设置
SET COMPATIBLE ON && 这样 FSIZE 函数返回文件大小, 而不是字段大小
IF "." $ lcfilename
lcfilename=LEFT(lcfilename,AT(".",lcfilename))
ENDIF
lctempfile=SYS(3) && 指定临时文件名
COPY TO (lctempfile) FIELDS (lcfieldname) NEXT 1 && 复制通用字段的内容到临时文件中
lihandlein=FOPEN(lctempfile+".FPT") && 打开它的 .FPT

*--考查 .FPT 内容以决定嵌入文档的类型
DO CASE
CASE FSEEK(lihandlein,590)>0 .AND. FREAD(lihandlein,2)="BM"
lcextension="BMP"
liendoffset=FSEEK(lihandlein,590)+83
*-- 注: 在源代码中 以上代码行中的 590 为 599
CASE FSEEK(lihandlein,610)>0 .AND. ASC(FREAD(lihandlein,1))=208 .AND. ASC(FREAD(lihandlein,1))=207 .AND. ASC(FREAD(lihandlein,1))=17
lcextension="DOC"
liendoffset=FSEEK(lihandlein,610)+16798
CASE FSEEK(lihandlein,669)>0 .AND. ASC(FREAD(lihandlein,1))=255 .AND. ASC(FREAD(lihandlein,1))=216 .AND. ASC(FREAD(lihandlein,1))=255
lcextension="JPG"
liendoffset=FSEEK(lihandlein,648)+3779
*-- 注: 在源代码中 以上代码行中的 669 为 648
CASE FSEEK(lihandlein,666)>0 .AND. FREAD(lihandlein,3)="GIF"
lcextension="GIF"
liendoffset=FSEEK(lihandlein,666)+3780
*-- 注: 在源代码中 以上代码行中的 666 为 663
OTHERWISE
lcextension=""
ENDCASE
IF .NOT. EMPTY(lcextension)
lisize=FSIZE(lctempfile+".FPT")-liendoffset && 决定数据大小
lihandleout=FCREATE(lcfilename+"."+lcextension) && 创建输出文件
=FWRITE(lihandleout,FREAD(lihandlein,lisize)) && 复制数据到它
=FCLOSE(lihandlein) && 关闭临时 .FPT..
=FCLOSE(lihandleout) && ...和输出文件
ENDIF
IF EMPTY(lcextension)
MESSAGEBOX("未找到该类型的通用字段",0,"注意")
SET COMPATIBLE &lccompatible && 恢复 "Compatible"
RETURN .F.
ENDIF
lctempfile=lctempfile+".*" && 删除临时 .DBF/.FPT
ERASE (m.lctempfile)
SET COMPATIBLE &lccompatible && 恢复 "Compatible"
IF FILE(lcfilename+"."+lcextension)
llsuccess=.T.
ENDIF
RETURN llsuccess
十豆三 2006-06-06
  • 打赏
  • 举报
回复
用VFP做个中间程序或DLL,然后由ASP调用这个中间程序或DLL,VFP中的方法请参考:


*假设有一个TEMP.DBF表,此表中有一个通用型字段,并存有图片(*.BMP)
*以下是把此图片文件从表中导出,生成名为Text.bmp文件。
*此方法只适合表中只有一条通用型字段记录含有图片文件
*------------------------------

handlein=FOPEN("temp.fpt")
handleout=FCREATE("Test.Bmp")
&&如果事先知道表中存的为BMP文件,如果存的为JPG文件,此处改为Test.jpg


*** 决定"Temp.fpt"文件的长度
gnEnd = FSEEK(handlein, 0, 2)
gnTop = FSEEK(handlein, 0)


*** 保存全部文件到一个串 "str1" 中
str1 = FREAD(handlein, gnEnd)


*** 从 Str1 的偏移 599 字节开始保存到 "str2"
str2=RIGHT(str1,LEN(str1)-599)
*** 写 "Str2" 到 BMP 文件 "Test.BMP"
n=FWRITE(handleout,str2)

*** 关闭两个打开的文件
=FCLOSE(handlein)
=FCLOSE(handleout)

&&会在当前目录下生成一个Test.bmp文件。

2,726

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧