[PATCH] msado15: Support VT_I4/I2 for Fields Item property

Gabriel Ivăncescu gabrielopcode at gmail.com
Tue Jun 8 08:17:41 CDT 2021


On 08/06/2021 07:22, Alistair Leslie-Hughes wrote:
> Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
> ---
>   dlls/msado15/recordset.c     | 16 ++++++++++++++++
>   dlls/msado15/tests/msado15.c | 17 +++++++++++++++++
>   2 files changed, 33 insertions(+)
> 
> diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c
> index 8d7619d9161..7cd943f55d5 100644
> --- a/dlls/msado15/recordset.c
> +++ b/dlls/msado15/recordset.c
> @@ -740,6 +740,22 @@ static HRESULT map_index( struct fields *fields, VARIANT *index, ULONG *ret )
>   {
>       ULONG i;
>   
> +    if (V_VT( index ) == VT_I4 || V_VT( index ) == VT_I2)
> +    {
> +        if (V_VT( index ) == VT_I4)
> +            i = V_I4 ( index );
> +        else
> +            i = V_I2 ( index );
> +
> +        if (i < fields->count)
> +        {
> +            *ret = i;
> +            return S_OK;
> +        }
> +
> +        return MAKE_ADO_HRESULT(adErrItemNotFound);
> +    }
> +
>       if (V_VT( index ) != VT_BSTR)
>       {
>           FIXME( "variant type %u not supported\n", V_VT( index ) );
> diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
> index 97a578b0618..860144338c0 100644
> --- a/dlls/msado15/tests/msado15.c
> +++ b/dlls/msado15/tests/msado15.c
> @@ -133,6 +133,23 @@ static void test_Recordset(void)
>       hr = Fields__Append( fields, name, adInteger, 4, adFldUnspecified );
>       ok( hr == S_OK, "got %08x\n", hr );
>   
> +    V_VT( &index ) = VT_I4;
> +    V_I4( &index ) = 1000;
> +    hr = Fields_get_Item( fields, index, &field );
> +    ok( hr == MAKE_ADO_HRESULT(adErrItemNotFound), "got %08x\n", hr );
> +
> +    V_VT( &index ) = VT_I4;
> +    V_I4( &index ) = 0;
> +    hr = Fields_get_Item( fields, index, &field );
> +    ok( hr == S_OK, "got %08x\n", hr );
> +    Field_Release(field);
> +
> +    V_VT( &index ) = VT_I2;
> +    V_I4( &index ) = 0;
> +    hr = Fields_get_Item( fields, index, &field );
> +    ok( hr == S_OK, "got %08x\n", hr );
> +    Field_Release(field);
> +
>       V_VT( &index ) = VT_BSTR;
>       V_BSTR( &index ) = name;
>       hr = Fields_get_Item( fields, index, &field );
> 

Hi Alistair,

Did you test other integer types? Do they not work? (e.g. I1, and 
unsigned int variants)

If they do work, you can just convert via VariantChangeType to an VT_I4 
when it's not a BSTR, and use that as index. I recall I did something 
similar in msscript.ocx to handle such.



More information about the wine-devel mailing list