MSAccess.SysCmd 将旧 mdb 转换为 accdb,在 vb.net vs2019

Posted

技术标签:

【中文标题】MSAccess.SysCmd 将旧 mdb 转换为 accdb,在 vb.net vs2019【英文标题】:MSAccess.SysCmd converting old mdb to accdb, in vb.net vs2019 【发布时间】:2020-09-02 12:56:00 【问题描述】:

我在将旧的访问 mdb 转换为新格式 (2007) accdb 时遇到问题。 过去我使用过以下代码,该代码有效:

    ' Delete the resultant accdb just in case
    File.Delete("C:\temp\TheTargetDB.accdb")
    Dim oAccess = CreateObject("Access.Application")

    Dim ret = oAccess.SysCmd(603, "C:\temp\TheSourceDB.mdb", "C:\temp\TheTargetDB.accdb")

    oAccess.quit()
    oAccess = Nothing

    If ret = 0 Then
        MsgBox("DID NOT CONVERT")
        Exit Sub
    End If

但是,我尝试将它与变量一起使用,但这不起作用:

    Dim SourceDBName As String = "C:\temp\TheSourceDB.mdb"
    Dim TargetDBName As String = "C:\temp\TheTargetDB.accdb"

    ' Delete the resultant accdb just in case
    File.Delete(TargetDBName)
    Dim oAccess = CreateObject("Access.Application")

    Dim ret = oAccess.SysCmd(603, SourceDBName, TargetDBName)

    oAccess.quit()
    oAccess = Nothing

    If ret = 0 Then
        MsgBox("DID NOT CONVERT")
        Exit Sub
    End If

SysCmd 有什么我不知道的特别之处吗?

【问题讨论】:

【参考方案1】:

经过几个小时的努力,我在查看 Microsoft Doc 文章时偶然发现了答案:MS Access SysCmd method

源和目标的参数类型是旧的“变体”数据类型。 我决定修改我的代码以将字符串变量转换为“对象”类型:

Dim ret = oAccess.SysCmd(603, CObj(SourceDBName), CObj(TargetDBName))

vs2019 说演员阵容是多余的,但你猜怎么着? - 成功了!

我希望这对处于类似情况的任何人都有用。 干杯 安德鲁

【讨论】:

以上是关于MSAccess.SysCmd 将旧 mdb 转换为 accdb,在 vb.net vs2019的主要内容,如果未能解决你的问题,请参考以下文章

如何将旧版 SQL BigQuery 转换为标准 SQL?

将旧版 SQL 查询转换为标准 SQL

将旧 Auth 用户转换为增强 Auth 用户

.NET 中 .CSV 到 .MDB 的转换

将 MDB 转换为 MySQL 的最佳方法 [关闭]

我可以使用 .NET 将 ACCDB 文件转换为 MDB