2012-04-12 38 views
5

MS Access 2000をMS Access 2010に変換しています。私が直面している問題は、MS Access 2010が変換後に非常に遅い(フリーズすることさえある)ことです。MS Access 2000を2010年に変換する

前の設定:Windowsの上に座ってのSQL Server 2000へのリンクテーブルとXP上の MS Access 2000の2000

新しい設定:SQL Server 2000の座っへのリンクテーブルを使用してWindows 7上ののMS Access 2010 Windows 2000の

に新しい設定の下でのアクセスは、Visual Studioのデスクトップアプリケーションと痛々しいほど遅いか時々ハングやクラッシュ 同じ状況である私が、それは、Win7の上で痛々しいほど遅い動作しますXP上ではうまく動作しません。私が試してみました

もの:新しいMS Accessの2010を作成し、MS Officeの最大の変更をリンクテーブルなど

  • を更新2000年バージョン
  • からすべてのオブジェクトをインポートすることにより、MS Access 2000の変換

    1. レジストリ内のバッファサイズは55000に(一部のMSサポートサイトで示唆されているように)

    これまでのところ改善はほとんどありません。

  • +1

    SQL Server 2000をSQL Server 2008 Expressのようなものにアップグレードしなかった理由はありますか? – HK1

    +2

    http://social.technet.microsoft.com/Forums/en/office2007deploymentcompatibility/thread/88542372-0fcb-4521-87ec-e2ab72e688ddを見ましたか? – Fionnuala

    +0

    専用DBサーバーが使用されている場合は、リンクされたテーブルを避け、その処理能力を活用し、ADO接続スタイルを常に採用することが常にベストです。これにより、サーバーはアクセス外では実行できないものを除き、すべての作業を実行します。 –

    答えて

    2

    問題の原因が複数になる可能性があるため、返信が困難です。 2つのクライアントが同じOS構成ではないため、2つのOSの構成の違いから問題が発生することを除外できません。

    まずコネクションが、理由はPCへのアクセスや、あなたのDB遅い場合は見分けることができます。

    テスト:直接接続

    あなたは直接のかかわりを使用してSQL Serverに直接かかわりを試すことができますリンクされたテーブルの代わりに。 このために、SQL Serverに接続された新しいアクセスプロジェクトを作成することができます。アクセスプロジェクトは、リンクテーブルなしでSQL Serverに直接接続するAccessデータベースの一種です。ネイティブクライアントを使用します。 Accessで直接SQL Serverデータベースのテーブルを表示し、それらを編集できます。アクセスプロジェクトの拡張はMDBではなくADPです。アクセスプロジェクトはAccess 2010では表示されませんが、サポートされています。

    アクセスプロジェクトを作成するには:[ファイル] - > [新規作成]を選択し、ファイルアイコンをクリックして、[ファイルの種類として保存]を選択します: "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ビット)SQL ServerへのODBCコネクション用
    • あなたDSN文字列の範囲たが正規化される
    • DSNがシステムDSNである場合は、新しいDSNとして再作成して試してみてください。
    1

    まず、最新のMDACを使用していることを確認してください。次に、Access自体からクエリを実行するのではなく、SQLでストアドプロシージャまたはテーブル値関数を作成することをお勧めします。 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 
    

    End Subの

    私はので、私は今接続限りアクセスが実行されているオープンを保つしばらく前にこの問題を持っていた、ここでは、このための私のサブの機能縮小版です http://www.fmsinc.com/microsoftaccess/performance/linkeddatabase.html

    私は、SQLサーバーの要件はありませんが、簡単にGoogleは、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

    2

    私がクエリは、実際にSQLサーバーで起こっているSQLサーバーで実行しているかチェックします凍結されます。例えば。このような何かを実行することによって:アクセスクエリは非常によく、SQLサーバに翻訳されていなかったところ

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

    は、私がかつて遅いアクセスアプリケーションをデバッグ。アクセスクエリで単純なものが原因で、多くの非効率なSQLサーバクエリが実行されました。これらのクエリのいくつかをSQL Serverのビューとして書き直し、私たちのために解決しました。

    関連する問題