Re: Wrong scale for numeric data types in MS Access and ADODB

From: Mike Toews <mwtoews(at)gmail(dot)com>
To: pgsql-odbc(at)postgresql(dot)org
Subject: Re: Wrong scale for numeric data types in MS Access and ADODB
Date: 2010-06-16 02:43:08
Message-ID: AANLkTimZNd6WSqXk9q_lOGOcbQUMz04u6Z_pFSKG8KQz@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Oh, I did find a simple workaround by modifying my database:

ALTER TABLE chem ALTER atomic_weight TYPE numeric(28,14);

I guess my case for a bug is if the numeric data type has an
unspecified scale, then it defaults to 6 for some unknown reason.

-Mike

On 15 June 2010 19:37, Mike Toews <mwtoews(at)gmail(dot)com> wrote:
> Hi,
>
> I'm mostly convinced this is a bug, but I just need to verify (and
> maybe find a workaround??). I am trying to link a postgres table with
> a numeric column into Microsoft Access 2003 using the PostgreSQL
> Unicode ODBC driver, version 8.04.02.00 (12/27/2009). Here is the
> table and data in PostgreSQL 8.4.
>
> CREATE TABLE chem
> (
>  id serial NOT NULL,
>  "name" text NOT NULL,
>  atomic_weight numeric,
>  CONSTRAINT chem_pkey PRIMARY KEY (id),
>  CONSTRAINT chem_name_key UNIQUE (name)
> );
>
> INSERT INTO chem("name", atomic_weight) VALUES
> ('Arsenic',74.92159),
> ('Sodium', 22.98976928),
> ('Tritium',3.016049);
>
>
> The data looks normal in pgAdmin, so there is no problem on the server end.
>
> On my Microsoft Windows test laptop, I've set up a System DSN using
> the PostgreSQL Unicode ODBC driver to the database using all defaults,
> setting only the required fields. In MS Access 2003, I can link
> public.chem as public_chem, but viewing the linked table shows me
> this:
>
> id      name    atomic_weight
> 1       Arsenic 74.92159
> #Error  #Error  #Error
> 3       Tritium 3.016049
>
> There are three rows, but the second shows #Error across all lines,
> and if I click on that row I see an error dialog "Scaline of decimal
> value resulted in data truncation" eight times. If I insert another
> row (using psql):
> INSERT INTO chem("name", atomic_weight) VALUES ('Cesium',132.9054519);
>
> this also has an error, since there are 7 decimal places used.
> However, I can insert more lines with 6 or fewer decimal places
> without error.
>
> Viewing the MS Access linked table in [read-only] "Design mode" of
> reveals that the numeric field "atomic_weight" has a precision of 28
> and a scale of 6. This is not correct (or modifiable), since there are
> more than 6 decimal places used in the database for my example data.
> This is why the rows with Sodium and Cesium have errors, while Arsenic
> and Tritium are good, since there are 6 or less decimal places used.
>
> Investigating further using VBA/ADODB shows a similar underling scale issue:
>
> Sub test()
>    Dim conn As New ADODB.Connection
>    Dim cmd As New ADODB.Command
>    Dim rs As ADODB.Recordset
>
>    conn.ConnectionString = "Driver={PostgreSQL
> Unicode};Server=192.168.123.1;Port=5432;Database=mydb;Uid=myuser;Pwd=mypass;"
>    conn.Open
>
>    Set cmd.ActiveConnection = conn
>    cmd.CommandText = "SELECT * FROM chem WHERE name='Sodium';"
>
>    Set rs = cmd.Execute()
>    Set cmd = Nothing
>
>    Debug.Print rs("name"), rs("atomic_weight"),
> rs("atomic_weight").NumericScale
>
>    rs.Close
>    Set rs = Nothing
>
>    conn.Close
>    Set conn = Nothing
> End Sub
>
> The console debug output shows:
> Sodium         22.98976928   6
>
> meaning that the NumericScale of the field is also set at 6. Again,
> this scale of 6 is incorrect, but the output is correct and no errors
> are thrown by this sub.
>
> How can I modify the scale for this column? Is this a bug, and with
> what component? Are there any known workarounds besides crippling my
> data to a smaller scale?
>
> Thanks for taking a look!
>
> -Mike
>

In response to

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Richard Broersma 2010-06-16 02:50:28 Re: Wrong scale for numeric data types in MS Access and ADODB
Previous Message Mike Toews 2010-06-16 02:37:51 Wrong scale for numeric data types in MS Access and ADODB