当前位置: 代码迷 >> VFP >> 怎么查询到表中通用型字段里对象的文件名
  详细解决方案

怎么查询到表中通用型字段里对象的文件名

热度:10139   发布时间:2013-02-26 00:00:00.0
如何查询到表中通用型字段里对象的文件名
请问:有什么命令可以查询到表中通用型字段里对象的文件名?

------解决方案--------------------------------------------------------
VBScript code
提取.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:\copygenLOCAL lccompatible,lcextension,liendoffset,;    lctempfile,lihandelin,lihandleout,lisize,llsuccesslccompatible=SET("COMPATIBLE")                    && 保存 "Compatible" 设置SET COMPATIBLE ON                               && 这样 FSIZE 函数返回文件大小, 而不是字段大小IF "." $ lcfilename    lcfilename=LEFT(lcfilename,AT(".",lcfilename))ENDIFlctempfile=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=""ENDCASEIF .NOT. EMPTY(lcextension)    lisize=FSIZE(lctempfile+".FPT")-liendoffset     && 决定数据大小    lihandleout=FCREATE(lcfilename+"."+lcextension) && 创建输出文件    =FWRITE(lihandleout,FREAD(lihandlein,lisize))    && 复制数据到它    =FCLOSE(lihandlein)                             && 关闭临时 .FPT..    =FCLOSE(lihandleout)                            && ...和输出文件ENDIFIF EMPTY(lcextension)    MESSAGEBOX("未找到该类型的通用字段",0,"注意")    SET COMPATIBLE &lccompatible                    && 恢复 "Compatible"    RETURN .F.ENDIFlctempfile=lctempfile+".*"                          && 删除临时 .DBF/.FPTERASE (m.lctempfile)SET COMPATIBLE &lccompatible                        && 恢复 "Compatible"IF FILE(lcfilename+"."+lcextension)    llsuccess=.T.ENDIFRETURN llsuccess
------解决方案--------------------------------------------------------
VBScript code
http://www.meizibbs.3322.org/bbs/dispbbs.asp?boardid=2&replyid=31641&id=15742&page=1&skin=0&Star=9*--复制 .DBF 通用字段内容到一个.BMP,.DOC,.GIF 或 .JPG 文件,*--切去由 APPEND GENERAL 命令添加的所有的头和尾部信息.*--调用方法 =gentofil(字段名,表名)func gentofilparameters lcfieldname,lcfilenamelocal lccompatible,lcextension,liendoffset,;    lctempfile,lihandelin,lihandleout,lisize,llsuccesslccompatible=set("COMPATIBLE") set compatible on if "." $ lcfilename    lcfilename=left(lcfilename,at(".",lcfilename))endiflctempfile=sys(3)copy to (lctempfile) fields (lcfieldname) next 1 lihandlein=fopen(lctempfile+".FPT") *--考查 .FPT 内容以决定嵌入文档的类型do casecase fseek(lihandlein,590)>0 .and. fread(lihandlein,2)="BM"    lcextension="BMP"    liendoffset=fseek(lihandlein,590)+83case 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)+16798case 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)+3779case fseek(lihandlein,666)>0 .and. fread(lihandlein,3)="GIF"    lcextension="GIF"    liendoffset=fseek(lihandlein,666)+3780otherwise    lcextension=""endcaseif .not. empty(lcextension)    lisize=fsize(lctempfile+".FPT")-liendoffset    lihandleout=fcreate(lcfilename+"."+lcextension)     =fwrite(lihandleout,fread(lihandlein,lisize))     =fclose(lihandlein)     =fclose(lihandleout) endifif empty(lcextension)    messagebox("未找到该类型的通用字段",0,"注意")    set compatible &lccompatible     return .f.endiflctempfile=lctempfile+".*"   erase (m.lctempfile)set compatible &lccompatible  if file(lcfilename+"."+lcextension)    llsuccess=.t.endifreturn llsuccess81楼zxplhzlt的帖子真是通用字段的福音但存在一些问题,我以BMP为例进行了一些改良:*--复制 .DBF 通用字段内容到一个.BMP, .DOC, .GIF 或 .JPG 文件, *--切去由 APPEND GENERAL 命令添加的所有的头和尾部信息.*--调用方法 =gen2file(字段名, 表名)FUNCTION Gen2FileLPARAMETERS tcField, tcFileLOCAL lcTempFile, llSuccess, lnSelectLOCAL liHandleIn, liHandleOut, liSizelcTempFile = SYS(3)COPY TO (m.lcTempFile) FIELDS (m.tcField) NEXT 1liHandleIn = FOPEN(m.lcTempFile + ".FPT")liSize = FSEEK(m.liHandleIn, 0, 2)*--考查备注文件以决定嵌入文档类型lnSelect = SELECT(0)DO GenInbuiltDocTypeInfoSCAN FOR liSize > nFlagOff = FSEEK(liHandleIn, nFlagOff) IF FREAD(m.liHandleIn, nFlagLen) == cFlag  = FSEEK(m.liHandleIn, nHeadOff)  liSize = liSize - nHeadOff - nTailLen  liHandleOut = FCREATE(FORCEEXT(m.tcFile, cExtension))  = FWRITE(m.liHandleOut, FREAD(m.liHandleIn, m.liSize))  = FCLOSE(m.liHandleOut)  llSuccess = .T.  EXIT ENDIFENDSCANUSE &&IN curDocInfo= FCLOSE(liHandleIn)ERASE (m.lcTempFile + ".*")SELECT (m.lnSelect)RETURN m.llSuccessFUNCTION GenInbuiltDocTypeInfoCREATE CURSOR curDocInfo(cExtension C(3),nFlagOff I,nFlagLen I,cFlag M,nHeadOff I,nTailLen I)INSERT INTO curDocInfo VALUES ("DOC", 610, 3, CHR(208) + CHR(207) + CHR(17), 610, 16798)INSERT INTO curDocInfo VALUES ("JPG", 669, 3, CHR(255) + CHR(216) + CHR(255), 648, 3779)INSERT INTO curDocInfo VALUES ("GIF", 666, 3, "GIF", 666, 3780)INSERT INTO curDocInfo VALUES ("BMP", 590, 2, "BM", 590, 83)INSERT INTO curDocInfo VALUES ("BMP", 599, 3, "BM6", 599, 51)没有进行一一测试,可以自行扩充。程序没有进行错误处理,有兴趣的帮忙完善一下。
  相关解决方案