当前位置: 代码迷 >> VFP >> 请问关于DBF转换access和excel的有关问题
  详细解决方案

请问关于DBF转换access和excel的有关问题

热度:5303   发布时间:2013-02-26 00:00:00.0
请教关于DBF转换access和excel的问题
DBF里的mero字段,当为大写Mero时可以看见里面的值,为小写mero时里面的值看不见导出后(导到excel)也是空的,不知道怎么回事?
我想把DBF里4万左右的数据导出到access里怎么导啊?导到excel里用什么方法最好?
谁有时间帮我下,我先谢谢了!

------解决方案--------------------------------------------------------


导出到access里

也可以从ACCESS直接倒入,直接打开ACCESS,然后文件导入,主菜单选择 文件,获取外部数据,导入,然后选择dbase IV即可。
------解决方案--------------------------------------------------------
当备注型字段(memo)没有内容时就显示 memo,有记录时显示 Memo
------解决方案--------------------------------------------------------
VBScript code
----------DBF 导入 ACCESS----------方法一:用ACCESS中“文件”->“获取外部数据”->“导入”参考:http://access911.net/eg/swf/importDBF.htmhttp://access911.net/eg/swf/importDBF.swf用此种方法有时会提示“外部表不是预期的格式”,如果提示这错误,用以下方法解决:1、用VFP打开DBF表,然后COPY TO NEWTABLE TYPE FOX2X,然后再用此方法把NEWTABLE导入试试。2、改用ACCESS2003。方法二:用ACCESS中“文件”->“获取外部数据”->“导入”,然后文件类型选择ODBC Database(),然后选择<机器数据源>,        点击“新建”来建立一个数据源,数据源类型用“用户数据源”或“系统数据源”(建议用后者),然后点击“下一步”,        驱动程序选择‘Microsoft Visual FoxPro Driver’,点击“下一步”,点击“完成”,        在Data Source Name(数源源名称)处输入此数据源名称,可自定,本例如LjDbf,Database Type(数据库类型)处        选择“Free Table directory”(自由表路径),然后在下面的Path(路径)处设置你要导入的DBF表所在的路径,本列如“D:\” ,        点击“确定”关闭数据源配制窗口,然后在“导入对象”窗口选择你要导入的DBF表,最后点击“确定”即可。方法三:用VFP连接ACCESS,然后用代码把DBF数据一条一条写入ACCESS。就像写入SQL一样方法四:如果你安装了SQL Server,可以用SQL Server的导入导出数据(DTS)来进行,因为DTS有向导,这里不做介绍。方法五:先把DBF转成EXCEL或TXT,然再用方法一进行导入。        注:DBF表如果不含用备注字段,直接用COPY TO 表名.XLS type xl5 转成EXCEL,如果含用备注型字段,必须用下面方法转成EXCEL:****DBFTOEXCEL.PRG****CLOSE DATABASES ALLSET DATE YMDSET CENTURY ONcDbfFile = GETFILE("dbf")IF EMPTY(cDbfFile)    RETURNENDIFUSE (cDbfFile) ALIAS FoxTable IN 0IF NOT USED("FoxTable")    =MESSAGEBOX("打开表失败,程序将中止!", 16, "Error")    RETURNENDIFcExcelFile = PUTFILE("保存为(&N):",JUSTSTEM(cDbfFile)+".xls","xls")IF EMPTY(cExcelFile)    CLOSE DATABASES ALL    RETURNENDIFSELECT FoxTableoExcelSheet = GETOBJECT("","Excel.Sheet")  && 产生Excel对象IF NOT TYPE("oExcelSheet") = "O"    =MESSAGEBOX("Excel对象创建失败,程序将中止!", 16, "Error")    RETURNENDIFoExcelApp = oExcelSheet.APPLICATIONoExcelApp.Workbooks.ADD()oExcelApp.ActiveWindow.WINDOWSTATE=2oSheet = oExcelApp.ActiveSheetnFldCount = AFIELDS(aFldList, "FoxTable")FOR i = 1 TO nFldCount    oSheet.Cells(1,i).VALUE = aFldList[i, 1]ENDFORcRecc = STR(RECCOUNT("FoxTable"))SCAN    WAIT WINDOW ALLTRIM(STR(RECNO())) + "/" + cRecc  NOWAIT    FOR i = 1 TO nFldCount        vValue = .NULL.        IF AT(aFldList[i, 2], "CDLMNFIBYT") = 0            LOOP        ENDIF        cFldName = aFldList[i, 1]        vValue = EVALUATE(cFldName)        DO CASE        CASE aFldList[i, 2] = "C"  && 字符/字符串            vValue = TRIM(vValue)        CASE aFldList[i, 2] = "D"  && 日期            vValue = DTOC(vValue)        CASE aFldList[i, 2] = "T"  && 日期时间            vValue = TTOC(vValue)        CASE INLIST(aFldList[i, 2], "N", "F", "I", "B", "Y")   && 数值        CASE aFldList[i, 2] = "L"  && 逻辑        CASE aFldList[i, 2] = "M"  && 备注型        OTHERWISE            vValue = .NULL.        ENDCASE        IF VARTYPE(vValue) = "C" AND EMPTY(vValue)            LOOP        ENDIF        IF NOT ISNULL(vValue)            oSheet.Cells(RECNO("FoxTable")+1, i).VALUE = vValue        ENDIF    ENDFORENDSCANcChrStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"FOR i = 1 TO nFldCount    cColumn = SUBSTR(cChrStr, INT((i-1)/26), 1) + SUBSTR(cChrStr, IIF(MOD(i, 26)= 0, 26, MOD(i, 26)) , 1)    oSheet.COLUMNS(cColumn + ":" + cColumn).COLUMNWIDTH = 12    IF aFldList[i, 2] = "M"        oSheet.COLUMNS(cColumn + ":" + cColumn).WrapText = .F.    ENDIFENDFORoExcelApp.ActiveWorkbook.SAVEAS(cExcelFile)oExcelApp.ActiveWorkbook.CLOSE(.F.)oExcelApp.ActiveWorkbook.CLOSE(.F.)oExcelApp.QUIToExcelSheet = .NULL.oExcelApp = .NULL.WAIT CLEAR=MESSAGEBOX("转换完毕!", 64, "OK")CLOSE DATABASES ALL
  相关解决方案