1

「File Sharing Lock Count has Exceeded」というエラー メッセージが表示され続けます。セッションごとにレジストリを増やすか、レジストリ ファイルを変更する回避策がありますが、ユーザーがそれを実行する必要はありません。このようなエラーが発生する理由を知っている人はいますか?

私のコードは次のとおりです。

Dim rst As DAO.Recordset
Dim rstCopy As DAO.Recordset
Dim Counter As Long

Set rst = dbs.openrecordset("SELECT * FROM [Qry_Calculate_Picking_Times]", dbopendynaset)
Set rstCopy = dbs.openrecordset("SELECT * FROM [Qry_Calculate_Picking_Times]", dbopendynaset)

rst.MoveLast
Counter = rst.RecordCount
rst.MoveFirst

rst.MoveNext
Counter = Counter - 1

While Counter > 0

With rst

If ![OWPPCK] <> rstCopy![OWPPCK] Or ![JustDate] <> rstCopy![JustDate] Or DateDiff("s", rstCopy![TIMESTAMP], ![TIMESTAMP]) > 3600 Then
    .Edit
    ![Time Difference Seconds] = Null
    .Update
Else
    .Edit
    ![Time Difference Seconds] = DateDiff("s", rstCopy![TIMESTAMP], ![TIMESTAMP])
    .Update
End If

If ![OWPFID] <> rstCopy![OWPFID] Then
    If ![OWPPCK] <> rstCopy![OWPPCK] Then
    Else
        .Edit
        ![NewLocation] = True
        .Update
    End If
End If

End With

rst.MoveNext
rstCopy.MoveNext

Counter = Counter - 1

Wend

rst.Close
rstCopy.Close

この段階でエラーが発生するようです

    Else
       .Edit
       ![Time Difference Seconds] = DateDiff("s", rstCopy![TIMESTAMP], ![TIMESTAMP])
       .Update
    End If
4

1 に答える 1

1

確かではありませんが、あなたがやっているように2つのレコードセットのレコードを比較すると問題が発生しているようです. すべきではありませんが、私たちは完璧な世界に住んでいるわけではありません。

達成しようとしていることは、1 つのレコードセットだけを使用して簡単に実行できるはずです。movenext ... を実行する前に、前のレコードを変数に格納するだけで、現在のレコードと比較できます。うまくいくと思われるコードを投稿しました。

注: 1) コードを読みやすくするために、変数で比較している現在のレコードセットのフィールドも保存しています。後でこれらのフィールド値を参照すると、速度が向上するはずです。同じ値に対してレコードセットに複数回ヒットしない(またはそう思う) 「While ... wend」の代わりに「Do until ... Loop」を使用しました。これは、単にそれが私のプログラミング スタイルだからです。

それがうまくいくことを願っています。ここにあります:

Sub DoIt
    Dim rst As DAO.Recordset
    Dim ThisOWPPK, PrevOWPPK
    Dim ThisJustDate, PrevJustDate
    Dim ThisTIMESTAMP, PrevTIMESTAMP
    Tim ThisOWPFID, PrevOWPFID

    Set rst = dbs.openrecordset("SELECT * FROM [Qry_Calculate_Picking_Times]", dbopendynaset)

    rst.MoveFirst

    Do Until rst.EOF
        PrevOWPPCK = ![OWPPCK]
        PrevJUSTDate = ![JustDate]
        PrevTIMESTAMP = ![TIMESTAMP]
        PrevOWPFID = ![OWPDIF]

        rst.MoveNext
        ThisOWPPCK = ![OWPPCK]
        ThisJUSTDate = ![JustDate]
        ThisTIMESTAMP = ![TIMESTAMP]
        ThisOWPFID = ![OWPDIF]

        If ThisOWPPCK <> PrevOWPPCK Or ThisJustDate <> PrevJustDate Or DateDiff("s", PrevTIMESTAMP, ThisTIMESTAMP) > 3600 Then
            .Edit
            ![Time Difference Seconds] = Null
            .Update
        Else
            .Edit
            ![Time Difference Seconds] = DateDiff("s", PrevTIMESTAMP, ThisTIMESTAMP)
            .Update
            End If

            If ThisOWPFID <> PrevOWPFID Then
            If ThisOWPPCK <> PrevOWPPCK Then
                Else
                    .Edit
                    ![NewLocation] = True
                    .Update
            End If
        End If

    Loop

End Sub
于 2014-02-05T01:03:54.377 に答える