It looks to me like the handling of the currency type in an ADODB
connecction from Python is broken.  Currency data in an Access database is
stored as a 64-bit integer, scaled by 10000.  In an ADODB recordset, this
is returned as a 2-tuple, where the second element is the currency value,
but the value is stored as a normal integer, not a lont integer.  Thus, it
fails for values greater than about $214,700 (2**32 / 10**4).

Here is an example:

  import win32com.client
  conn = win32com.client.Dispatch("ADODB.Connection")
  conn.Open("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=anydatabase.mdb")
  cmd = win32com.client.Dispatch("ADODB.Command")
  cmd.ActiveConnection = conn
  cmd.CommandText = "SELECT CCur(250000) AS myMoney;"
  rs = cmd.Execute()[0]
  for f in rs.Fields:
    print f.Name
    print f.Type
    print f.Value

One would expect

  myMoney
  6
  (0, 2500000000L)

Instead, we get:

  myMoney
  6
  (0, -1794967296)

The value has wrapped at 2**31.
-- 
- Tim Roberts, [EMAIL PROTECTED]
  Providenza & Boekelheide, Inc.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to