none
Access リンクテーブルのFindFirstが遅い RRS feed

  • 質問

  • Asscess 2013に、ODBC接続によるSQL Server 2012のリンクテーブルを使用しています。
    Formでキー入力するとそこにカレントを移動する処理を、FindFirstメソッドで行っているのですが、めちゃくちゃ遅いのです。
    18,000件のデータで、カレント移動するのに20秒以上かかります。

    <FindFirstメソッドのサンプル>
        Dim rsClone As Object
        Set rsClone = Me.Recordset.Clone
        rsClone.FindFirst "[得意先CD] >= " & CInt([参照CD])
        Me.Bookmark = rsClone.Bookmark

    あまりに遅いので、FindFirstをやめて、Moveメソッドに切り替えたところ、2秒前後で表示できるようになりました。

    <Moveメソッドのサンプル>
        Dim rs As New ADODB.Recordset
        Dim str As String
        str = "SELECT COUNT(*) - 1 AS r_pos FROM dbo.tbhTokui WHERE tokcd <= " & [参照CD]
        Call ConnectCL
        rs.Open str, cnCL, adOpenStatic, adLockReadOnly, adCmdText
        
        Dim rsClone As Object
        Set rsClone = Me.Recordset.Clone
        rsClone.Move rs!r_pos
        Me.Bookmark = rsClone.Bookmark

    但しこの方法では、フィルターがかかった状態では正常動作しませんし、それまでも考慮して作るのではAccessを使う魅力が半減します。
    何かスマートな別の方法はないでしょうか。
    2014年3月7日 1:49