5

私は、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 Max Buffer サイズを 55000 に変更します (一部の MS サポート サイトで提案されているように)。

これまでのところ、ほとんどまたはまったく改善されていません。

4

4 に答える 4

2

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

まず、PC、Access、またはDBが原因で接続が遅いかどうかを識別できます。

テスト:直接接続

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

Accessプロジェクトを作成するには:メニューの[ファイル]-> [新規]に移動し、ファイルアイコンをクリックして、[ファイルの種類]:[Microsoft Accessプロジェクト(* .adp)]を選択します。

ADPが作成されると、既存のSQLServerデータベースのパラメーターを入力するように求められます。パラメータを入力します。

次に、テーブルパネルに移動し、テーブルを参照して、遅いか速いかを確認します。

遅い=>の場合、問題はPCまたは接続に起因している可能性があります。SQL Serverに接続できるソフトウェアを使用して、直接接続をテストするために別のソフトウェアを試すことができます。

高速=>の場合、低速はACCDBまたはODBCリンクに起因します。

また、チェックしてください:

  • MsAccessは最新バージョンとMsOfficeパッチで最新です
  • ODBCシステムと「SQLServerへのODBCドライバー」は最新です(MDACの最新バージョンを使用してください)
  • Windows7とMsAccessおよびODBCバージョンのビット範囲は同じです(32ビットまたは64ビット)
  • SQLServerへのODBC接続用のDSN文字列は正規化されています
  • DSNがシステムDSNの場合は、ユーザーDSNとして新しいDSNを再作成して、試してください。
于 2012-04-19T12:09:31.933 に答える
2

接続を開いたままにしてみましたか?これは、別の accdb のリンクされたテーブルにのみ適用される可能性がありますが、確かではありません。

私はしばらく前にこの問題を抱えていたので、Access が実行されている限り接続を開いたままにしています。

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

于 2012-04-23T21:26:19.793 に答える
2

凍結しているときは、SQL Server で実際に実行されているクエリが sql-server で発生していることを確認します。例えば。次のようなものを実行して:

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

アクセスクエリがSQLサーバーにうまく変換されていない低速アクセスアプリケーションをデバッグしました。アクセス クエリの単純な理由により、多くの非効率的な SQL サーバー クエリが実行されました。これらのクエリのいくつかを sql-server ビューとして書き直し、解決しました。

于 2012-04-24T06:51:43.040 に答える
1

まず、最新の MDAC を使用していることを確認してください。次に、Access 自体からクエリを実行するのではなく、SQL でストアド プロシージャまたはテーブル値関数を作成することをお勧めします。Access はクエリを事前に解析して、SQL Server に対して実行されることを確認します。これにより、処理が遅くなる可能性があります。最後に、Access が更新と削除を実行している場合、SQL Server の TIMESTAMP 列を使用して、フォームが開いている間に他のユーザーがそのレコードを変更していないことを確認します。SQL にそのような列がない場合、Access がすべての追跡を行う必要があります。私たちはこれを自分で調べました.開発者にヒントを尋ね、何かあればコメントに投稿します.

于 2012-04-18T23:02:12.003 に答える