创建一个2003 .mdb文件

时间:2015-04-21 16:38:47

标签: vba ms-access

Dim LFileName as String
Applicaion.FileDialog(msoFileDialogSaveAs).InitialFileName = "\\filepath\\" & Format(Now,"mm-dd-yyyy") & ".mdb"
If intChoice <> 0 Then
    LFileName = Application.FineDialog(msoFileDialogSaveAs).SelectedItems(1)
End If

If Dir(LFilename) <> "" Then Kill LFilename

Set ws = dbEngine.Workspaces(0)
Set db = ws.CreateDatabase(LFileName, dbLangGeneral)

这是“创建.mdb文件”代码,它可以工作。唯一的问题是,在我将表格转移到所有内容之后,然后尝试将我的前端重新链接到后端(这创建了数据库),它给了我这个错误:

  

Microsoft Access dos不支持链接到以比当前数据库格式更高版本格式保存的Access数据库或Microsoft Office Excel工作簿

BUT。如果我采用新创建的后端文件(使用vba代码制作)和Save&amp;发布&gt; Microsoft Access 2003 .mdb格式,然后尝试重新链接它,它的工作原理。它是以.accdb保存,但使用.mdb后缀或其他(?)

所以这让我想知道是否有办法专门用VBA创建mdb 2003格式的mdb?我一整天都在谷歌搜索,除了上面的代码我找不到任何东西。有没有办法更好地说出这个问题?

信息:我正在使用Access 2010,但我必须使用.mdb,因为办公室里的某些人仍然使用Office 2007.我知道Office 2007可以使用.accdb文件,但它无法处理2010.accdb文件出于某种原因。

2 个答案:

答案 0 :(得分:2)

  

将[Access 2010]保存为.accdb,但带有.mdb后缀或其他内容(?)

是的,确实如此。如果你打开&#34; .mdb&#34; Access 2010中的文件标题栏会说

...:数据库(Access 2007 - 2010) - Microsoft Access

如果要创建Access_2003格式的数据库文件,请使用

Set db = ws.CreateDatabase(LFileName, dbLangGeneral, dbVersion40)

答案 1 :(得分:1)

我正在迁移许多Access 2000,2002-2003格式的数据库应用程序,以便在Access 2016环境中使用。我注意到其中一些数据库应用程序创建了一个临时数据库。

在Access 2003环境中,创建的临时数据库文件将使用在Access 2003实例中配置的任何默认数据库格式,例如格式2000或2002-2003使用以下代码:

Set dbnew = wk.CreateDatabase(gstrtmpdb, dbLangGeneral)
  

注意:&#39;选项&#39;这里没有使用数据库版本参数。

在Access 2016环境中,无论在Access实例中配置何种默认格式,相同的代码都将使用2007-2016创建数据库。在这种情况下,前端数据库格式2003尝试为新创建的临时数据库创建链接表(格式为2007-2016),并抛出相同的错误: Microsoft Access不支持链接到以晚于当前数据库格式的格式保存的Access数据库或Microsoft Office Excel工作簿。

使用Windows资源管理器查看在Access 2016环境中创建的临时数据库文件及其在打开数据库时创建的关联锁文件的详细信息时,可能会出现混淆。 VBA代码创建临时数据库文件,例如tempdb.mdb
从表面上看,它看起来像Access 2000或2002-2003格式的数据库文件 如果您打开此tempdb.mdb 创建的锁文件名为
tempdb.laccdb(2007-2016格式的锁文件)。这很令人困惑。

如果您需要创建2007-2016格式数据库以避免混淆,那么最好通过重命名创建的具有.accdb扩展名的数据库来修改 VBA 代码,而不是将其保留成为.mdb 在这种情况下,我们需要一个带有.mdb扩展名的2003格式,因此已经提到的修复是使用'Option'数据库版本参数,在这种情况下使用以下代码。

创建2003格式数据库

Set dbnew = wk.CreateDatabase(gstrtmpdb, dbLangGeneral, dbVersion40)
  

注意:&#39;选项&#39;这里使用了数据库版本参数。

希望这有助于人们。