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

lolming 2009-05-18 10:51:25
加精
DBF里的mero字段,当为大写Mero时可以看见里面的值,为小写mero时里面的值看不见导出后(导到excel)也是空的,不知道怎么回事?
我想把DBF里4万左右的数据导出到access里怎么导啊?导到excel里用什么方法最好?
谁有时间帮我下,我先谢谢了!
...全文
1706 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lesli2134 2009-11-17
  • 打赏
  • 举报
回复
学习中!谢谢!
xytek 2009-08-05
  • 打赏
  • 举报
回复
非常感谢十豆三,用您的program,一次性成功,太棒了!
Hemingway718 2009-05-20
  • 打赏
  • 举报
回复
UP
十豆三 2009-05-19
  • 打赏
  • 举报
回复
----------DBF 导入 ACCESS----------


方法一:用ACCESS中“文件”->“获取外部数据”->“导入”
参考:
http://access911.net/eg/swf/importDBF.htm
http://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 ALL
SET DATE YMD
SET CENTURY ON
cDbfFile = GETFILE("dbf")
IF EMPTY(cDbfFile)
RETURN
ENDIF
USE (cDbfFile) ALIAS FoxTable IN 0
IF NOT USED("FoxTable")
=MESSAGEBOX("打开表失败,程序将中止!", 16, "Error")
RETURN
ENDIF
cExcelFile = PUTFILE("保存为(&N):",JUSTSTEM(cDbfFile)+".xls","xls")
IF EMPTY(cExcelFile)
CLOSE DATABASES ALL
RETURN
ENDIF
SELECT FoxTable
oExcelSheet = GETOBJECT("","Excel.Sheet") && 产生Excel对象
IF NOT TYPE("oExcelSheet") = "O"
=MESSAGEBOX("Excel对象创建失败,程序将中止!", 16, "Error")
RETURN
ENDIF
oExcelApp = oExcelSheet.APPLICATION
oExcelApp.Workbooks.ADD()
oExcelApp.ActiveWindow.WINDOWSTATE=2
oSheet = oExcelApp.ActiveSheet
nFldCount = AFIELDS(aFldList, "FoxTable")
FOR i = 1 TO nFldCount
oSheet.Cells(1,i).VALUE = aFldList[i, 1]
ENDFOR
cRecc = 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
ENDFOR
ENDSCAN
cChrStr = "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.
ENDIF
ENDFOR
oExcelApp.ActiveWorkbook.SAVEAS(cExcelFile)
oExcelApp.ActiveWorkbook.CLOSE(.F.)
oExcelApp.ActiveWorkbook.CLOSE(.F.)
oExcelApp.QUIT
oExcelSheet = .NULL.
oExcelApp = .NULL.
WAIT CLEAR
=MESSAGEBOX("转换完毕!", 64, "OK")
CLOSE DATABASES ALL
十豆三 2009-05-19
  • 打赏
  • 举报
回复
当备注型字段(memo)没有内容时就显示 memo,有记录时显示 Memo
WWWWA 2009-05-19
  • 打赏
  • 举报
回复
mero字段:什么类型
xy111222333 2009-05-19
  • 打赏
  • 举报
回复
备注型字段没有内容时显示小写,有内容时显示大写。
findee 2009-05-19
  • 打赏
  • 举报
回复
学习一下,标记上,以后来看。
renchang20 2009-05-19
  • 打赏
  • 举报
回复
拿分走人咯
lolming 2009-05-18
  • 打赏
  • 举报
回复
哦 那么导进来的mero字段怎么办?小写的是空的啊!
ACMAIN_CHM 2009-05-18
  • 打赏
  • 举报
回复

导出到access里

也可以从ACCESS直接倒入,直接打开ACCESS,然后文件导入,主菜单选择 文件,获取外部数据,导入,然后选择dbase IV即可。

2,722

社区成员

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

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