From: Piotr Caban piotr@codeweavers.com
--- dlls/msado15/recordset.c | 5 +++-- dlls/msado15/tests/msado15.c | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index dd8e15cbe86..6454b032b26 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -2077,7 +2077,7 @@ static HRESULT WINAPI recordset_Open( _Recordset *iface, VARIANT source, VARIANT
if (recordset->state == adStateOpen) return MAKE_ADO_HRESULT( adErrObjectOpen );
- if (recordset->fields) + if (recordset->fields && get_column_count( recordset )) { recordset->state = adStateOpen; return S_OK; @@ -2122,7 +2122,8 @@ static HRESULT WINAPI recordset_Open( _Recordset *iface, VARIANT source, VARIANT /* We want to create the field member variable without mapping the rowset fields, this will * save querying the fields twice. Fields will be added while we create the bindings. */ - hr = fields_create( recordset, &recordset->fields ); + if (!recordset->fields) + hr = fields_create( recordset, &recordset->fields ); if (FAILED(hr)) { IUnknown_Release(rowset); diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 76e1bb35b77..66dd69a144e 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -186,6 +186,11 @@ static void test_Recordset(void) hr = _Recordset_get_Fields( recordset, &fields ); ok( hr == S_OK, "got %08lx\n", hr );
+ V_VT( &missing ) = VT_ERROR; + V_ERROR( &missing ) = DISP_E_PARAMNOTFOUND; + hr = _Recordset_Open( recordset, missing, missing, adOpenStatic, adLockBatchOptimistic, adCmdUnspecified ); + ok( hr == MAKE_ADO_HRESULT( adErrInvalidConnection ), "got %08lx\n", hr ); + name = SysAllocString( L"field" ); hr = Fields__Append( fields, name, adInteger, 4, adFldUnspecified ); ok( hr == S_OK, "got %08lx\n", hr );