From: Piotr Caban <piotr@codeweavers.com> --- dlls/msado15/recordset.c | 3 ++- dlls/msado15/tests/msado15.c | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index 25232872309..5c55c274303 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -3448,7 +3448,8 @@ static HRESULT WINAPI recordset_Find( _Recordset *iface, BSTR criteria, LONG ski if (!recordset->current_row) return S_FALSE; - if (V_VT(&start) == VT_ERROR && V_ERROR(&start) == DISP_E_PARAMNOTFOUND) + if ((V_VT(&start) == VT_ERROR && V_ERROR(&start) == DISP_E_PARAMNOTFOUND) || + (V_VT(&start) == VT_BSTR && !SysStringLen(V_BSTR(&start)))) { if (!recordset->bookmark_hacc) VariantInit( &start ); diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 551d18890f6..978b3b51645 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -1347,6 +1347,7 @@ static HRESULT WINAPI rowset_find_FindNextRow(IRowsetFind *iface, DBBKMARK bookmark_size, const BYTE *bookmark, DBROWOFFSET offset, DBROWCOUNT rows, DBCOUNTITEM *obtained, HROW **hrows) { + struct test_rowset *rowset = impl_from_IRowsetFind( iface ); struct haccessor *accessor = (struct haccessor *)hacc; VARIANT *v = find_value; @@ -1360,6 +1361,10 @@ static HRESULT WINAPI rowset_find_FindNextRow(IRowsetFind *iface, ok(V_VT(v) == VT_BSTR, "v = %s\n", wine_dbgstr_variant(v)); ok(!wcscmp(V_BSTR(v), L"1'1"), "v = %s\n", wine_dbgstr_variant(v)); ok(compare_op == DBCOMPAREOPS_EQ, "compare_op = %ld\n", compare_op); + if (rowset->exact_scroll) + ok(bookmark_size == sizeof(int), "bookmark_size = %Id\n", bookmark_size); + else + ok(!bookmark_size, "bookmark_size = %Id\n", bookmark_size); if (!bookmark_size) { ok(!bookmark, "bookmark != NULL\n"); @@ -2302,6 +2307,24 @@ static void test_ADORecordsetConstruction(BOOL exact_scroll) ok(hr == MAKE_ADO_HRESULT( adErrItemNotFound ), "got %08lx\n", hr ); if (exact_scroll) CHECK_CALLED(rowset_GetData); + V_VT(&v) = VT_BSTR; + V_BSTR(&v) = SysAllocString( L"" ); + SET_EXPECT(accessor_AddRefAccessor); + SET_EXPECT(rowset_AddRefRows); + SET_EXPECT(rowset_ReleaseRows); + SET_EXPECT(rowset_find_FindNextRow); + if (exact_scroll) SET_EXPECT(rowset_GetData); + SET_EXPECT(accessor_ReleaseAccessor); + hr = _Recordset_Find( recordset, (BSTR)L"Column1 = 1'1", 0, adSearchForward, v ); + ok( hr == S_OK, "got %08lx\n", hr ); + CHECK_CALLED(accessor_AddRefAccessor); + CHECK_CALLED(rowset_AddRefRows); + CHECK_CALLED(rowset_ReleaseRows); + CHECK_CALLED(rowset_find_FindNextRow); + if (exact_scroll) CHECK_CALLED(rowset_GetData); + CHECK_CALLED(accessor_ReleaseAccessor); + VariantClear(&v); + for (i = 0; i < ARRAY_SIZE(find_criteria); i++) { winetest_push_context( "%d", i ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10750