0

次のコードは、私が (Access で) 取り組んでいるほぼすべてのプロジェクトで使用するボイラープレートを少し変更したものです。このコードの他のすべてのバージョンは、このデータベースで完全に機能します。テーブルはすべて実際には SQL Server にありますが、この Access データベースにリンクされています。

ここに奇妙な部分があります...コードを実行して「With rs」に入り、「.Open」を実行すると、次のステップ「Do While Not .EOF」が「Do」の最後までスキップされます.. .私は .EOF です! しかし、".Source" SQL ステートメントのコピーを取得し、それを非コード Access メイン ウィンドウの空白の SQL クエリに貼り付けると、そのクエリから 835 レコードが取得されます。このクエリが 835 レコードを返さなければならないときに、空のレコードセットを取得するにはどうすればよいでしょうか?

.CursorType と .LockType を変更しようとしましたが、役に立ちませんでした。

これをトラブルシューティングするために私が試すことができることについて、誰か考えがありますか?

Public Sub test()
Dim db As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sFromDate As String
Dim sToDate As String
Dim sSubUnit As String

sFromDate = "1/1/2013"
sToDate = "1/31/2013"
sSubUnit = "2???"

' Make a connection to the db
Set db = CurrentProject.Connection

With rs
    .ActiveConnection = db
    .CursorType = adOpenForwardOnly
    .LockType = adLockReadOnly

    .Source = "SELECT SCEVENT.CLIENT_ID, SCATTEND.EMP_ID, SCATTEND.STARTDATE, SCATTEND.SVC_ID " & _
                "FROM SCATTEND LEFT JOIN SCEVENT ON SCATTEND.SCEVENT_ID = SCEVENT.ID " & _
                "WHERE (SCATTEND.STARTDATE Between #" & sFromDate & "# And #" & sToDate & "#) " & _
                    "AND (SCATTEND.SUBUNIT_ID Like '" & sSubUnit & "') " & _
                    "AND ((APPTYP_ID IS NULL) OR (APPTYP_ID IN (1,2))) " & _
                "ORDER BY SCEVENT.CLIENT_ID, SCATTEND.EMP_ID, SCATTEND.STARTDATE, SCATTEND.SVC_ID;"
    .Open
    Do While Not .EOF
        MsgBox "there are records!"
        .MoveNext
    Loop
    .Close
End With

Set rs = Nothing
Set db = Nothing

サブ終了

4

1 に答える 1