Office中国论坛/Access中国论坛

标题: 关于access2013链接DBF文件问题,请指教,谢谢 [打印本页]

作者: yanwei82123300    时间: 2015-8-25 07:46
标题: 关于access2013链接DBF文件问题,请指教,谢谢
公司强制所有office升级到2013版本!这个公司的员工都炸窝了,因为大家使用office2007的时候链接的都是公司ERP系统导出的DBF文件,然后再进行access的数据提取处理,现在公司强制升级到2013版本,但是不再支持DBF文件格式的链接,请各位老师看看有没有办法继续链接DBF文件,谢谢!
作者: laimf    时间: 2015-8-25 08:03
本帖最后由 laimf 于 2015-8-25 08:18 编辑

无语。。。。。。
方法倒是很多,可以修改导出格式为access,excel等office文档的格式。最好还是降低access版本到2013之前,2010才是最好的版本。

可以保留老版本的office运行环境,也可以安装Foxbase,Dbase,Visual FoxPro等数据库,或者一些这方面的插件DBFViewerPlus。

作者: tmtony    时间: 2015-8-25 08:32
将dbf作为ODBC 链接过来
作者: yanwei82123300    时间: 2015-8-25 09:27
tmtony 发表于 2015-8-25 08:32
将dbf作为ODBC 链接过来

老师您是说引用ODBC时候来链接DBF文件吗?能否截个图,谢谢
作者: laimf    时间: 2015-8-25 10:05
是说可以通过外部数据通用的ODBC,导入或链接DBF文档。
作者: yanwei82123300    时间: 2015-8-25 10:20
laimf 发表于 2015-8-25 10:05
是说可以通过外部数据通用的ODBC,导入或链接DBF文档。

微软access2013好像不在支持DBF文件的导入导出链接了!
作者: 风中漫步    时间: 2015-8-25 10:25
本帖最后由 风中漫步 于 2015-8-25 10:27 编辑

他们是说通过odbc,记得有这个选项的,也能代码通过ado,dao借助odbc
作者: yanwei82123300    时间: 2015-8-25 11:03
谢谢大家帮助了!
作者: roych    时间: 2015-8-25 11:10
laimf 发表于 2015-8-25 08:03
无语。。。。。。
方法倒是很多,可以修改导出格式为access,excel等office文档的格式。最好还是降低acces ...

这个问题,我老早就提出过了。http://www.office-cn.net/thread-117273-1-1.html
但dbf文件是可以用excel打开的。最初我的办法是用excel打开,再另存,然后导入。
另外,应该可以用ADO来处理【手头上没有dbf文件,不知道是否支持accdb格式】:
  1. Dim cn As Object
  2.     Dim rs As Object
  3.     Dim strSql As String
  4.     Dim strConnection As String
  5.     Set cn = CreateObject("ADODB.Connection")
  6.     strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  7.         "Data Source=C:\YourDir_thatcontains_dbf_files\\;" & _
  8.         "Extended Properties=dBase IV"

  9.     strSql = "S E L E C T   [COL1],[COL_ETC] FROM DBF_TABLE"      '不含扩展名,鉴于论坛过滤关键字,请自行把空格去掉

  10.     cn.Open strConnection
  11.     Set rs = cn.Execute(strSql)

  12.     While Not rs.EOF
  13.       Debug.Print rs.Fields("COL1").Value & vbTab & rs.Fields("COL_ETC").Value
  14.       'Or do somethin else you need to do
  15.       rs.MoveNext
  16.     Wend

  17.     rs.Close
  18.     Set rs = Nothing
  19.     cn.Close
  20.     Set cn = Nothing
复制代码

另一种简单点的做法,直接导入文件。:

  1. Dim Conn As New ADODB.Connection
  2. Conn.open"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\S\Job.mdb"
  3. Dim strSQL As  String
  4. strSQL="S E L E C T * INTO [Job] FROM [dBase III;DATABASE=D:\S].[JobX]"
  5. '这里Job为Access的表, 后面是DBF文件的路径。注意:不需要扩展名
  6. Conn.Execute strSQL
  7. Conn.Close()
复制代码

如使用12.0的引擎,可能还需要修改注册表:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Access Connectivity Engine\ISAM Formats\dBASE III]
"Engine"="Xbase"
"ExportFilter"="dBASE III (*.dbf)"
"ImportFilter"="dBASE III (*.dbf)"
"CanLink"=hex:01
"OneTablePerFile"=hex:01
"IsamType"=dword:00000000
"IndexDialog"=hex:00
"CreateDBOnExport"=hex:00
"SupportsLongNames"=hex:01
Here are other dbase files:
dBASE-4.0.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Access Connectivity Engine\ISAM Formats\dBASE IV]
"Engine"="Xbase"
"ExportFilter"="dBASE IV (*.dbf)"
"ImportFilter"="dBASE IV (*.dbf)"
"CanLink"=hex:01
"OneTablePerFile"=hex:01
"IsamType"=dword:00000000
"IndexDialog"=hex:00
"CreateDBOnExport"=hex:00
"SupportsLongNames"=hex:01
dBASE-5.0.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Access Connectivity Engine\ISAM Formats\dBASE 5.0]
"Engine"="Xbase"
"ExportFilter"="dBASE 5 (*.dbf)"
"ImportFilter"="dBASE 5 (*.dbf)"
"CanLink"=hex:01
"OneTablePerFile"=hex:01
"IsamType"=dword:00000000
"IndexDialog"=hex:00
"CreateDBOnExport"=hex:00
"SupportsLongNames"=hex:01
xBase.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Access Connectivity Engine\Engines\Xbase]
"win32"="C:\\PROGRA~1\\COMMON~1\\MICROS~1\\OFFICE14\\ACEXBE.DLL"
"DbcsStr"=hex:01
"Mark"=dword:00000000
"Date"="MDY"
"Exact"=hex:00
"Deleted"=hex:01
"Century"=hex:00
"CollatingSequence"="Ascii"
"DataCodePage"="OEM"
"NetworkAccess"=hex:01
"PageTimeout"=dword:00000258
参考链接:
http://jonwilliams.org/wordpress ... office-access-2013/


作者: yanwei82123300    时间: 2015-8-25 13:00
roych 发表于 2015-8-25 11:10
这个问题,我老早就提出过了。http://www.office-cn.net/thread-117273-1-1.html
但dbf文件是可以用exce ...

老师谢谢帮助,我提供一份DBF文件给您您试试,谢谢
作者: laimf    时间: 2015-8-25 16:27
本帖最后由 laimf 于 2015-8-25 16:48 编辑

用2013的excel可以打开导入,我刚试了一下成功了。
步骤:
1.手工创建一个基于DBF文件的ODBC链接字符串文件;
2.新建一个excel2013,打开“数据”菜单,“自其他来源”,选最后一个(来自微软的ODBC查询);
3.在 “选择数据源”窗体中,“数据库”选项卡菜单,“浏览”,选择已经建立的ODBC链接字符串文件,这时候就添加了一个新数据源;
4.选中这个数据源,“确定”,查询向导选择列窗体就出来了,点“>"全选,然后一路”下一步“,跟ACCESS中导入数据操作差不多。
5.默认是“将数据返回到excel”,点”完成“,有弹出”数据导入“,在这里选一个起始单元格,确定就OK!!!


不用这么复杂的操作。

EXCEL可以直接导入DBF文件。文件--打开--计算机--浏览,选中DBF文档,就直接导入EXCEL了。


作者: laimf    时间: 2015-8-25 16:33
本帖最后由 laimf 于 2015-8-25 16:46 编辑

DBF文档数据导入EXCEL ,再导入ACCES。

作者: yanwei82123300    时间: 2015-8-26 07:42
laimf 发表于 2015-8-25 16:33
DBF文档数据导入EXCEL ,再导入ACCES。

谢谢帮助,PDF是公司的ERP系统每天导出的文件,每天更新的!
作者: roych    时间: 2015-8-26 08:38
yanwei82123300 发表于 2015-8-26 07:42
谢谢帮助,PDF是公司的ERP系统每天导出的文件,每天更新的!

如果你的电脑装了2003的话可以用这个:
Sub test2()
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "test", CurrentProject.Path & "\d_ssil.dbf", True
End Sub
否则就用这个:
  1. Sub test()
  2. Dim cnn As New ADODB.Connection
  3. Dim rst As New ADODB.Recordset
  4. Dim rst1 As New ADODB.Recordset
  5. Dim strSQL As String
  6. Dim i As Long
  7. '经测试,12.0引擎不支持,估计需要修改注册表。
  8. '这里用4.0的引擎,在32位Office 2013版本测试成功。有条件的版友烦请测试下64位的Office 2013
  9. cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBase IV;Data Source=" & CurrentProject.Path
  10. '把SQL语句多余的空格删掉
  11. strSQL = "S E L E C T * FROM [D_SSIL]"

  12. rst.Open strSQL, cnn, adOpenKeyset, adLockOptimistic

  13. rst1.Open "test", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

  14. Do Until rst.EOF
  15.     rst1.AddNew
  16.     For i = 0 To rst1.Fields.Count - 1
  17.         rst1(i) = rst(i)
  18.     Next
  19.     rst.MoveNext
  20. Loop
  21. rst1.UpdateBatch
  22. rst1.Close
  23. End Sub
复制代码


[attach]57126[/attach]
作者: 风中漫步    时间: 2015-8-26 09:20
那erp就没有种格式是acc2013也喜欢的?
作者: yanwei82123300    时间: 2015-8-26 10:05
roych 发表于 2015-8-26 08:38
如果你的电脑装了2003的话可以用这个:
Sub test2()
DoCmd.TransferSpreadsheet acImport, acSpreadshe ...

老师,我们电脑已经被全部更新成了OFFICE2013版本!
作者: zpy2    时间: 2015-8-28 05:57
应有DAO36的,用mdb




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3