是否可以仅使用VBA将Access MDE数据库升级到Access 2007 ACCDE格式?

时间:2014-04-28 20:46:20

标签: ms-access-2007 upgrade ms-access-2003

我想为用户提供升级他们自己的后端数据库的工具,而不是将文件发送给我以使用Access手动转换。

这可能吗?阅读了这个主题后,我没有太大的希望,但希望专家确认这是不可能或希望是解决方案。

1 个答案:

答案 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。