From: Piotr Caban piotr@codeweavers.com
--- dlls/msado15/recordset.c | 8 ++++++-- dlls/msado15/tests/msado15.c | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index 091a6e7ba33..326664d2ecb 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -319,8 +319,12 @@ static HRESULT WINAPI field_get_Precision( Field *iface, unsigned char *precisio
static HRESULT WINAPI field_get_NumericScale( Field *iface, unsigned char *scale ) { - FIXME( "%p, %p\n", iface, scale ); - return E_NOTIMPL; + struct field *field = impl_from_Field( iface ); + + TRACE( "%p, %p\n", iface, scale ); + + *scale = field->scale; + return S_OK; }
static HRESULT WINAPI field_AppendChunk( Field *iface, VARIANT data ) diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 44b4c565aba..95c73591c1f 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -746,7 +746,7 @@ static void test_ADORecordsetConstruction(void) ok( count == 1, "got %ld\n", count ); if (count > 0) { - unsigned char prec; + unsigned char prec, scale; VARIANT index; ADO_LONGPTR size; DataTypeEnum type; @@ -768,6 +768,9 @@ static void test_ADORecordsetConstruction(void) hr = Field_get_Precision( field, &prec ); ok( hr == S_OK, "got %08lx\n", hr ); ok( prec == 1, "got %u\n", prec ); + hr = Field_get_NumericScale( field, &scale ); + ok( hr == S_OK, "got %08lx\n", hr ); + ok( scale == 1, "got %u\n", scale );
Field_Release(field); } @@ -786,10 +789,10 @@ static void test_Fields(void) { _Recordset *recordset; ISupportErrorInfo *errorinfo; + unsigned char prec, scale; Fields *fields; Field *field, *field2; VARIANT val, index; - unsigned char prec; BSTR name; LONG count; ADO_LONGPTR size; @@ -876,6 +879,9 @@ static void test_Fields(void) hr = Field_get_Precision( field, &prec ); ok( hr == S_OK, "got %08lx\n", hr ); ok( !prec, "got %u\n", prec ); + hr = Field_get_NumericScale( field, &scale ); + ok( hr == S_OK, "got %08lx\n", hr ); + ok( !scale, "got %u\n", scale );
hr = Field_put_Precision( field, 7 ); ok( hr == S_OK, "got %08lx\n", hr ); @@ -883,6 +889,12 @@ static void test_Fields(void) ok( hr == S_OK, "got %08lx\n", hr ); ok( prec == 7, "got %u\n", prec );
+ hr = Field_put_NumericScale( field, 12 ); + ok( hr == S_OK, "got %08lx\n", hr ); + hr = Field_get_NumericScale( field, &scale ); + ok( hr == S_OK, "got %08lx\n", hr ); + ok( scale == 12, "got %u\n", scale ); + Field_Release( field ); Fields_Release( fields ); ok( !_Recordset_Release( recordset ), "_Recordset not released\n" );