次の方法で共有

Access2007にてMovenextを行うと遅い

Anonymous
2011-01-11T08:31:19+00:00

CPU:Core2Quad 2.7GHz、メモリ:4.0GBのパソコンで、

Windows7 pro x32上にAccess2007(12.0.6535.5005)SP2 MSO(12.0.6545.5004)をインストールしてあります。

Windows7,Access2007は最新のパッチを適用してあります。

約15,000件あるクエリのデータを頭から順番にMovenextにてアクセスするコーディングをしています。

Windows7にOffice2007をインストールした環境にて実施すると、応答が極めて遅くなってしまいます。

Movenextで読み進めていくと、最初の方のレコードは早いのですが、だんだんと遅くなってきて、15,000件に達するまでは、相当な時間がかかってしまいます。(約10分程度)

WindowsXPでOffice2007の環境やWindowsVistaでOffice2007の環境で同じ事を行っても、現象が発生しません。(数秒で終了します。)

該当DBはリンクは一切行っていません。1つのDB内にデータとコーディングがなされています。またファイルサーバー上で共有して利用しているので、PCのローカルディスク上にコピーして行ってみましたが、結果は同じでした。

パフォーマンスの最適化を行ったのですが、変化無しです。

ウィルス対策ソフトを落として実施しても変化無しです。

解決方法をご教示頂けないでしょうか。よろしくお願いいたします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2011-01-12T07:47:05+00:00

こんちは。

んーと、コードからすると、Form上でカレントレコードを順次移動させてるように思えるのですけど、これであってます?以降、これ前提でのコメントです

Win7+access2007は格段に遅いですね。Win7_64では試してないですけどまぁ放置で。

Me.Recordset.MoveNextで発生するフォームイベントのいずれか調子悪い感じがします。カレント/ヘッダーフッタペイントとか。

フォームイベントが必要ならば、別フォームから実行するか、

ヘッダーなどにアクティブなコントロールがあると発生してるみたいなので、

直前にDoCmd.RunCommand acCmdSelectRecordを実行するとよいかもしれない

検索移動目的ならそれなりのコマンドやメソッドを使うべきで、目的如何によっては、別のコーディングをした方がよいかもです。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

5 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2011-01-12T11:15:27+00:00

    解決の方向でなによりです。

    DoCmd.RunCommand acCmdSelectRecord

    を提案したのは、フォームヘッダー/フッターなどに置いてあるテキストボックスやコマンドボタンにフォーカスが残っている場合(コマンドボタンだとクリックした直後以降)、

    フォームヘッダーの描画にaccessの中の人がやたら苦労していたように見えたからです。ただフォーカスを移したかっただけで、詳細セクションにあるコントロール、

    たとえば、Me.受付ID.SetFocusでも同じかも知れません。

    DoCmd.RunCommand acCmdSelectRecordは、レコードを選択した状態(レコードセレクターを押下)になるので、本来はそこからコピーやペーストなどするのですけど、フォーカスが移動する特性を使って、

    Private Sub CmdButton01_Click()

        DoCmd.RunCommand acCmdSelectRecord

        Me.コマンド0.Visible = False

    End Sub

    みたいなフォーカスがあると実行できない場合に使ってたりします、時折。

    >例えばDoCmd.FindRecordのようなメソッドを使うべきということでよろしいでしょうか。

    検索目的であれば、現在より高速で実行できると思います。

    フォームヘッダーにコマンドボタンとテキストボックスがある帳票フォームで、

    Private Sub CmdButton01_Click()

        Me.受付ID.SetFocus

        DoCmd.FindRecord Me.txt01, acEntire, False, acSearchAll, False, acCurrent, True

    End Sub

    各パラメータは適当です。ヘルプなどご確認ください。

    もしくは、

    Private Sub CmdButton01_Click()

        Dim rs As DAO.Recordset

        Set rs = Me.Recordset.Clone

        rs.FindNext "受付ID = " & Me.txt01

        Me.Bookmark = rs.Bookmark

    End Sub

    Recordset .CloneメソッドもしくはForm .RecordsetCloneプロパティ

    Form .Bookmarkプロパティ/Recordset .Bookmarkプロパティがポイントです。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2011-01-12T08:56:11+00:00

    こんにちは。

    まさにおっしゃるとおりで、Formで一覧表を表示する際に、どこら辺を表示するのか探しているコーディングです。

    教えて頂きましたDoCmd.RunCommand acCmdSelectRecordを直前に入れてみたところ、問題無く表示することが出来ました。

    ありがとうございます。(ここ1ヶ月弱悩んでいたことが解決できそうです。)

    すみません。後学のために教えて頂きたいのですが、

    このコマンドを知らなくて調べてみたのですが、「テーブル(クエリ)のレコード全体をセレクトする」というコマンドと理解しました。

    これで何故速くなるのでしょうか?(「ヘッダーなどにアクティブなコントロールがあると発生してる」???すみません、わかりませんでした。)

    >検索移動目的ならそれなりのコマンドやメソッドを使うべき

    例えばDoCmd.FindRecordのようなメソッドを使うべきということでよろしいでしょうか。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2011-01-11T23:05:19+00:00

    こんばんは。

    切り分けを進められているのでWin7+access2007の組み合わせに焦点を当てることでよさそうですけど、すべてのWin7+access2007マシンで現象って起きていますか?

    ちなみにどのようなコーディングをされているのでしょう。現象が発生するサンプルの提示などあるとよいかなと思いました。

    おはようございます。

    はい、弊社内に2台のWin7マシンがあるのですが、2台とも発生しています。両方とも32bit版です。Accessのバージョンも同じです。

    コーディングのサンプルですが、以下のとおりです。

    Do Until Me.受付ID.Value = BUmark

        Me.Recordset.MoveNext

        If Me.Recordset.EOF = True Then

            Me.Recordset.MoveFirst

            Exit Do

        End If

    Loop

    見てのとおり、受付IDがBUmarkという変数エリア内の値になるまでMovenextで読み進めるというコーディングです。

    よろしくお願いします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2011-01-11T12:50:08+00:00

    こんばんは。

    切り分けを進められているのでWin7+access2007の組み合わせに焦点を当てることでよさそうですけど、すべてのWin7+access2007マシンで現象って起きていますか?

    ちなみにどのようなコーディングをされているのでしょう。現象が発生するサンプルの提示などあるとよいかなと思いました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません