请问:有什么命令可以查询到表中通用型字段里对象的文件名?
------解决方案--------------------------------------------------------
- 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)没有进行一一测试,可以自行扩充。程序没有进行错误处理,有兴趣的帮忙完善一下。