From: Piotr Caban piotr@codeweavers.com
--- dlls/msado15/recordset.c | 11 ++++++++++- dlls/msado15/tests/msado15.c | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index e53d86d4ca0..79e80c15e69 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -1777,10 +1777,19 @@ static HRESULT WINAPI recordset_put_CursorType( _Recordset *iface, CursorTypeEnu static HRESULT WINAPI recordset_get_EOF( _Recordset *iface, VARIANT_BOOL *eof ) { struct recordset *recordset = impl_from_Recordset( iface ); + HRESULT hr;
TRACE( "%p, %p\n", recordset, eof );
- *eof = (!recordset->count || recordset->index >= recordset->count) ? VARIANT_TRUE : VARIANT_FALSE; + if (recordset->state == adStateClosed) return MAKE_ADO_HRESULT( adErrObjectClosed ); + + if (!recordset->is_eof && !recordset->is_bof && !recordset->current_row) + { + hr = cache_get( recordset, TRUE ); + if (FAILED(hr)) return hr; + } + + *eof = recordset->is_eof; return S_OK; }
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 42900e39002..a73ac67ec6d 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -1363,7 +1363,7 @@ static void test_ADORecordsetConstruction(BOOL exact_scroll) CHECK_CALLED( rowset_AddRefRows ); CHECK_CALLED( rowset_ReleaseRows ); ok( hr == S_OK, "got %08lx\n", hr ); - todo_wine ok( !is_eof( recordset ), "at eof\n" ); + ok( !is_eof( recordset ), "at eof\n" );
SET_EXPECT( rowset_AddRefRows ); SET_EXPECT( rowset_ReleaseRows );