我想为用户提供升级他们自己的后端数据库的工具,而不是将文件发送给我以使用Access手动转换。
这可能吗?阅读了这个主题后,我没有太大的希望,但希望专家确认这是不可能或希望是解决方案。
答案 0 :(得分:0)
如果你真的只限于MDE / ACCDE格式,这似乎是不可能的。
如果只使用表和查询,一种不完美的方法是创建所需格式的新数据库,并从旧数据库导入表和查询。这是因为使用MDE / ACCDE格式,您无法导入或导出表单,模块和宏。要尝试这个会产生错误:
错误29045:说明:"您无法在ACCDE,MDE或ADE数据库中导入,导出,创建,修改或重命名任何表单,报告,页面或模块。"
如果仅使用表格和查询,您可以根据http://support.microsoft.com/kb/298174
中给出的示例按照以下步骤进行操作(在我的场景中,我无法将新数据库用作当前数据库,因此我必须暂时导入当前数据库,然后导出到新数据库,否则只需直接导入新数据库。)
Dim strNewDB As String
Dim strOldDB As String
Dim dbOld as Database
Dim dbNew as Database
Dim tbl As Variant
Dim qry As QueryDef
Set dbNew = DBEngine.CreateDatabase(strNewDB, dbLangGeneral & ";pwd=xxxxx"), dbEncrypt)
Set dbOld = DBEngine.OpenDatabase(strOldDB, , , ";pwd=xxxxx"))
'import/export tables
For Each tbl In dbOld.TableDefs
Debug.Print tbl.name
If left(tbl.name, 4) <> "MSys" Then
DoCmd.TransferDatabase acImport, "Microsoft Access", dbOld.name, acTable, _
tbl.name, "_temp_" & tbl.name
DoCmd.TransferDatabase acExport, "Microsoft Access", dbNew.name, acTable, _
"_temp_" & tbl.name, tbl.name
DoCmd.DeleteObject acTable, "_temp_" & tbl.name
End If
Next tbl
'import/export queries
For Each qry In dbOld.QueryDefs
Debug.Print qry.name
DoCmd.TransferDatabase acImport, "Microsoft Access", dbOld.name, acQuery, _
qry.name, "_temp_" & qry.name
DoCmd.TransferDatabase acExport, "Microsoft Access", dbNew.name, acQuery, _
"_temp_" & qry.name, qry.name
DoCmd.DeleteObject acQuery, "_temp_" & qry.name
Next qry
正如Robert Harvey中的this comment所提到的,当使用MDB / ACCDB时,您可以使用Application.ConvertAccessProject。