【问题标题】:Converting MS Access 2000 to 2010将 MS Access 2000 转换为 2010
【发布时间】:2012-04-12 17:59:56
【问题描述】:

我正在将 MS Access 2000 转换为 MS Access 2010。我面临的问题是,转换后 MS Access 2010 非常慢(甚至冻结)。

以前的配置: XP 上的 MS Access 2000 与 Windows 2000 上的 Sql server 2000 的链接表

新配置: Windows 7 上的 MS Access 2010 与位于 Windows 2000 上的 Sql server 2000 的链接表

New Config 下的访问速度非常缓慢,或者有时会挂起和崩溃 与 Visual Studio 桌面应用程序的情况相同,它在 Win7 上运行缓慢,而在 XP 上运行良好。

我尝试过的事情:

  1. 通过创建新的 MS Access 2010 并从 2000 版本导入所有对象来转换 MS Access 2000
  2. 刷新链接表等
  3. 将注册表中的 MS Office 最大缓冲区大小更改为 55000(如某些 MS 支持站点中所建议的那样)

到目前为止几乎没有改善。

【问题讨论】:

  • 您没有将 SQL Server 2000 升级到类似 SQL Server 2008 Express 的原因是什么?
  • 在使用专用数据库服务器时最好避免链接表,利用它们的处理能力并始终采用 ADO 连接方式。这将使服务器执行所有工作,除了在访问之外无法完成的任何工作。
  • @MattDonnan 这不是 Microsoft 推荐的 Access 2010。有支持的链接表。
  • @Remou 是的,尽管我确实希望微软能够捍卫和支持他们的产品功能。我只提到了 ADO 方法,因为当链接表方法遇到优化问题时,它总是很适合我。当使用 access 作为数据库后端时,我仍然支持链接表。

标签: sql-server ms-access windows-7 ms-access-2010


【解决方案1】:

很难回答,因为问题的根源可能是多方面的。 由于两个客户端的操作系统配置不同,所以不能排除是两个操作系统配置不同造成的问题。

首先,您可以判断连接速度慢是因为 PC、Access 还是您的数据库:

测试:直接连接

您可以尝试使用直接连接而不是链接表直接连接到 SQL 服务器。 为此,您可以创建一个连接到 SQL Server 的新 Access 项目。 Access 项目是一种直接连接到 SQL Server 的 Access 数据库,没有链接表。它使用本机客户端。您可以直接在 Access 中查看 SQL Server 数据库的表,并且可以对其进行编辑。 Access项目的扩展不是MDB而是ADP。 Access 项目在 Access 2010 中隐藏,但得到很好的支持。

要创建 Access 项目:进入菜单文件 -> 新建,然后单击文件图标,然后选择“保存类型”:“Microsoft Access 项目 (*.adp)”。

创建 ADP 时,它应该要求您输入现有 SQL Server 数据库的参数。输入您的参数。

然后进入表格面板,尝试浏览一些表格,看看是慢还是快。

如果它很慢 => 那么问题可能来自您的 PC 或连接。您可以尝试使用其他软件来测试您是否有可以连接到 SQL Server 的直接连接。

如果速度快 => 则慢来自 ACCDB 或 ODBC 链接。

还要检查:

  • Ms Access 是最新的最新版本和 Ms Office 补丁
  • 您的 ODBC 系统和“SQL Server 的 ODBC 驱动程序”是最新的(使用 MDAC 的最新版本)
  • 您的 Windows 7 和 Ms Access 和 ODBC 版本具有相同的位范围(32 位或 64 位)
  • 您的 ODBC 连接到 SQL Server 的 DSN 字符串已标准化
  • 如果您的 DSN 是系统 DSN,则重新创建一个新的 DSN 作为用户 DSN 并尝试。

【讨论】:

    【解决方案2】:

    您是否尝试过保持连接打开?这可能只适用于另一个 accdb 中的链接表,不确定。

    不久前我遇到了这个问题,所以我现在只要 Access 正在运行就保持连接打开,这是我的 sub 的精简版本:

    Public Sub updateTables(bClose As Boolean)
    
    Dim dbsCurrent As Database
    Dim tdfSingle As TableDef
    Dim tdfCollection As TableDefs
    Dim sBasePath As String, sPath As String
    Set dbsCurrent = CurrentDb
    Set tdfCollection = dbsCurrent.TableDefs
    Set dbsHold = dbsCurrent
    
    Static dbsOpen As DAO.Database
    
    If bClose Then
        dbsOpen.Close
    Else
        sBasePath = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & "SB-Support\"
        sPath = GetUNC(sBasePath & "data.dat")
    
        Set dbsOpen = OpenDatabase(sPath, False, False, "MS Access;")
        For Each tdfSingle In tdfCollection
            If tdfSingle.SourceTableName <> "" Then
                If tdfSingle.Fields.Count = 0 Then
                    tdfSingle.Connect = ";DATABASE=" & sPath
                    tdfSingle.RefreshLink
                End If
            End If
        Next
    End If
    
    Exit Sub
    

    结束子

    我想我最初是从这里检索到的: http://www.fmsinc.com/microsoftaccess/performance/linkeddatabase.html

    我没有 SQL 服务器要求,但一个快速的谷歌给了我这个用于 SQL 连接的 OpenDatabase:

    Dim cs As String
    Dim cn As DAO.Database
    Dim ws As DAO.Workspace
    Set ws = DBEngine.Workspaces(0)
    cs = "ODBC;DRIVER=SQL Server;SERVER=Main\SQLEXPRESS;DATABASE=Workwise;APP=Visual Basic"      'UID=Peter;PWD="
    Set cn = ws.OpenDatabase("Workwise", dbDriverNoPrompt, True, cs)
    

    http://www.vbforums.com/archive/index.php/t-572723.html

    【讨论】:

      【解决方案3】:

      当它冻结时,我会检查 sql-server 中实际运行的查询是在 sql-server 中发生的。例如。通过运行这样的东西:

      select (SELECT text FROM ::fn_get_sql(s1.sql_handle)), *
      from sys.sysprocesses s1
      

      有一次我调试了一个访问速度慢的应用程序,其中访问查询没有很好地转换为 sql-server。访问查询中的一些简单问题导致许多低效的 sql-server 查询运行。我们将其中一些查询重写为 sql-server 视图并为我们解决了。

      【讨论】:

        【解决方案4】:

        首先,确保您拥有最新的 MDAC。接下来,我建议在 SQL 中创建存储过程或表值函数,而不是从 Access 本身运行查询。 Access 将预先解析查询以确保它会针对 SQL Server 运行,这可能会减慢速度。最后,如果 Access 正在执行更新和删除,它将使用 SQL Server TIMESTAMP 列来确保在您打开表单时没有其他人更改该记录。如果 SQL 没有这样的列,则 Access 必须执行所有跟踪。我们自己刚刚经历过——我会向开发人员询问任何提示,如果她有任何建议,我会在 cmets 中发布。

        【讨论】:

          猜你喜欢
          • 2019-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多