From: Piotr Caban <piotr(a)codeweavers.com> --- dlls/msado15/recordset.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index 514de8c18b5..449786e7fe1 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -1896,13 +1896,6 @@ static HRESULT load_all_recordset_data(struct recordset *recordset, IUnknown *ro columns = get_column_count(recordset); - /* Create the data array */ - if (!resize_recordset( recordset, recordset->count )) - { - WARN("Failed to resize recordset\n"); - return E_OUTOFMEMORY; - } - hr = IUnknown_QueryInterface(rowset, &IID_IRowset, (void**)&rowset2); if (FAILED(hr)) { @@ -1913,6 +1906,7 @@ static HRESULT load_all_recordset_data(struct recordset *recordset, IUnknown *ro hr = IRowset_GetNextRows(rowset2, 0, 0, 1, &obtained, &row); if (hr != S_OK) { + recordset->count = 0; recordset->index = -1; IRowset_Release(rowset2); return FAILED(hr) ? hr : S_OK; @@ -1931,6 +1925,15 @@ static HRESULT load_all_recordset_data(struct recordset *recordset, IUnknown *ro { VARIANT *v; + if (!resize_recordset(recordset, datarow+1)) + { + IRowset_ReleaseRows(rowset2, 1, row, NULL, NULL, NULL); + free(data); + IRowset_Release(rowset2); + WARN("Failed to resize recordset\n"); + return E_OUTOFMEMORY; + } + for (datacol = 0; datacol < columns; datacol++) { hr = IRowset_GetData(rowset2, *row, recordset->haccessors[datacol], data); @@ -2152,8 +2155,8 @@ static HRESULT WINAPI recordset_Open( _Recordset *iface, VARIANT source, VARIANT IUnknown_Release(rowset); return hr; } - recordset->count = affected > 0 ? affected : 0; + resize_recordset(recordset, recordset->count); hr = load_all_recordset_data(recordset, rowset, bindings, datasize); if (FAILED(hr)) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8093