2012-04-12 109 views
5

我正在將MS Access 2000轉換爲MS Access 2010.我面臨的問題是,轉換後MS Access 2010非常慢(甚至凍結)。轉換MS Access 2000至2010

上配置: MS Access 2000中的XP與鏈接表到SQL Server 2000坐在在Windows 2000

新配置: MS Access 2010中的Windows 7與鏈接表到SQL Server 2000的休息在Windows 2000下新的配置

訪問是非常緩慢或有時掛起和崩潰 與Visual Studio的桌面應用程序一樣的情況,它可以運行在Win7的十分緩慢,而我在XP上運行效果很好。

事情我已經嘗試:

  1. 通過創建一個新的MS Access 2010和導入所有的對象從2000年版本轉換的MS Access 2000中
  2. 刷新鏈接表等
  3. 更改MS Office的最大註冊表中的緩衝區大小爲55000(如某些MS支持站點中所建議的)

到目前爲止幾乎沒有改進。

+1

是否有任何原因導致您沒有將SQL Server 2000升級到SQL Server 2008 Express之類的東西? – HK1 2012-04-12 19:20:11

+2

您是否看到http://social.technet.microsoft.com/Forums/zh-cn/office2007deploymentcompatibility/thread/88542372-0fcb-4521-87ec-e2ab72e688dd? – Fionnuala 2012-04-12 21:58:54

+0

當專用數據庫服務器正在使用時,避免鏈接表總是最好的,充分利用其處理能力並始終採用ADO連接方式。這將使服務器執行所有工作,除了在訪問之外無法完成的任何事情之外。 – 2012-04-13 08:29:43

回答

2

這很難回答,因爲問題的根源可能是多重的。 由於這兩個客戶端的操作系統配置不一樣,我們不能排除問題來自兩個操作系統之間的配置差異。

首先,你可以看出,如果接頭是因爲PC的速度慢,訪問或您的DB:

測試:直接連接

您可以使用直接聯接嘗試直接聯接到SQL服務器而不是鏈接表。 爲此,您可以創建一個連接到SQL Server的新Access項目。 Access項目是一種Access數據庫,它直接連接到SQL Server,無需鏈接表。它使用本地客戶端。您可以直接在Access中查看SQL Server數據庫的表格,並且可以編輯它們。 Access項目的擴展不是MDB,而是ADP。訪問項目隱藏在Access 2010中,但得到很好的支持。要創建一個Access項目:進入菜單文件 - >新建,然後點擊文件圖標,然後選擇「另存爲類型」:「Microsoft Access Project(* .adp)」。

創建ADP時,它應該要求您輸入現有SQL Server數據庫的參數。輸入你的參數。

然後轉到表格面板,嘗試瀏覽某個表格並檢查它是否緩慢或快速。

如果速度慢=>那麼問題可能來自您的PC或連接。你可以嘗試用另一個軟件來測試你的直接連接有一個可以連接到SQL Server的連接。

如果它很快=>那麼速度來自ACCDB或ODBC鏈接。

同時檢查:

  • 微軟的Access是最新的,與去年的版本和MS Office補丁
  • 您的ODBC系統和 「ODBC驅動程序到SQL Server」 是最新的(以持續的MDAC版)
  • 你的Windows 7和MS Access和ODBC版本具有相同的比特範圍(32位或64位)
  • 你的DSN字符串的ODBC聯接到SQL Server是標準化
  • 如果您的DSN是一個系統DSN,然後重新創建一個新的用戶DSN並嘗試。
1

首先,確保你有最新的MDAC。接下來,我會建議在SQL中創建存儲過程或表值函數,而不是從Access本身運行查詢。 Access將預先解析查詢以確保它將針對SQL Server運行,並且可能會降低速度。最後,如果Access正在執行更新和刪除操作,它將使用SQL Server TIMESTAMP列確保沒有其他人在打開窗體時更改了該記錄。如果SQL沒有這樣的列,Access必須完成所有的跟蹤。我們只是自己去了解 - 如果她有任何問題,我會向開發人員詢問任何提示,並在評論中發帖。

2

您是否試過保持連接打開?這可能只適用於另一個accdb中的鏈接表,不確定。

我有這個問題而回,所以我現在保持連接打開,只要訪問正在運行,這是我分了這一個精簡版本:

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服務器的要求,但快速谷歌給了我這個對的openDatabase的SQL連接:

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

2

當它被凍結我會檢查哪些查詢實際上是在SQL服務器運行的是發生在SQL服務器。例如。通過運行是這樣的:

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

我調試的訪問速度慢的應用程序,一旦在訪問查詢沒有被很好地轉化爲SQL服務器。訪問查詢中的一些簡單操作導致許多低效的sql-server查詢運行。我們將這些查詢中的一些重新編寫爲sql-server視圖併爲我們解決了這個問題。