From: Piotr Caban piotr@codeweavers.com
--- dlls/msado15/recordset.c | 8 ++++++-- dlls/msado15/tests/msado15.c | 18 ++++++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index 4d49ce4f689..3ecb0cc8fc8 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -308,8 +308,12 @@ static HRESULT WINAPI field_put_Value( Field *iface, VARIANT val )
static HRESULT WINAPI field_get_Precision( Field *iface, unsigned char *precision ) { - FIXME( "%p, %p\n", iface, precision ); - return E_NOTIMPL; + struct field *field = impl_from_Field( iface ); + + TRACE( "%p, %p\n", iface, precision ); + + *precision = field->prec; + return S_OK; }
static HRESULT WINAPI field_get_NumericScale( Field *iface, unsigned char *scale ) diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 3219755916c..44b4c565aba 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -746,6 +746,7 @@ static void test_ADORecordsetConstruction(void) ok( count == 1, "got %ld\n", count ); if (count > 0) { + unsigned char prec; VARIANT index; ADO_LONGPTR size; DataTypeEnum type; @@ -754,6 +755,7 @@ static void test_ADORecordsetConstruction(void) V_BSTR( &index ) = SysAllocString( L"Column1" );
hr = Fields_get_Item( fields, index, &field ); + VariantClear(&index); ok( hr == S_OK, "got %08lx\n", hr );
hr = Field_get_Type( field, &type ); @@ -763,8 +765,9 @@ static void test_ADORecordsetConstruction(void) hr = Field_get_DefinedSize( field, &size ); ok( hr == S_OK, "got %08lx\n", hr ); ok( size == 5, "got %Id\n", size ); - - VariantClear(&index); + hr = Field_get_Precision( field, &prec ); + ok( hr == S_OK, "got %08lx\n", hr ); + ok( prec == 1, "got %u\n", prec );
Field_Release(field); } @@ -786,6 +789,7 @@ static void test_Fields(void) Fields *fields; Field *field, *field2; VARIANT val, index; + unsigned char prec; BSTR name; LONG count; ADO_LONGPTR size; @@ -837,6 +841,7 @@ static void test_Fields(void) V_VT( &index ) = VT_BSTR; V_BSTR( &index ) = name; hr = Fields_get_Item( fields, index, &field ); + ok( hr == S_OK, "got %08lx\n", hr );
/* calling get_Item again returns the same object and adds reference */ hr = Fields_get_Item( fields, index, &field2 ); @@ -868,6 +873,15 @@ static void test_Fields(void) hr = Field_get_Attributes( field, &attrs ); ok( hr == S_OK, "got %08lx\n", hr ); ok( !attrs, "got %ld\n", attrs ); + hr = Field_get_Precision( field, &prec ); + ok( hr == S_OK, "got %08lx\n", hr ); + ok( !prec, "got %u\n", prec ); + + hr = Field_put_Precision( field, 7 ); + ok( hr == S_OK, "got %08lx\n", hr ); + hr = Field_get_Precision( field, &prec ); + ok( hr == S_OK, "got %08lx\n", hr ); + ok( prec == 7, "got %u\n", prec );
Field_Release( field ); Fields_Release( fields );