Turns out it was a bug in FreeTDS...  See here:
http://lists.ibiblio.org/pipermail/freetds/2010q3/026214.html

This is fixed in the CVS head of FreeTDS as of Aug 4, 2010.  Until
this change makes it into a release, the nightly build is available
here:
ftp://ibiblio.unc.edu/pub/Linux/ALPHA/freetds/current/freetds-current.tgz

I built this and confirmed that it works correctly with web2py.  I
built it with the following commands:

cd ~
wget ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/current/freetds-current.tgz
tar xzvf freetds-stable.tgz
cd freetds-0.83.dev.20100804/   (Your version of TDS will be
different)
./configure --prefix=/usr --sysconfdir=/etc --with-tdsver=8.0 --enable-
msdblib
sudo make && sudo make install clean

However, the option to set the TDS Version to 8.0 did not seem to take
for some reason (maybe I should have used 'sudo' to execute the
configure command as root).  I fought with that for a long time before
realizing I could pass that setting in the web2py connection string:

db = DAL('mssql://user:p...@dbserver.domain.com/DBName?
DRIVER=FreeTDS;TDS_Version=8.0')

Hopefully this information will be useful to someone.


On Jul 30, 11:52 am, mwolfe02 <michael.joseph.wo...@gmail.com> wrote:
> Massimo,
>
> Per your first post:
>
> If I run the query using DAL, I get a Decimal type back for both
> environments.  Of course, there is no way for web2py to make that
> coercion for fields returned from .executesql.  Since that minimizes
> the pain greatly for me, I think I will just go ahead with explicitly
> converting to Decimals when working with .executesql.
>
> If I learn anything with reference toFreeTDSI'll be sure to come
> back and post that here.
>
> Thanks to you and Michele for the help.
>
> On Jul 30, 11:19 am, Michael Wolfe <michael.joseph.wo...@gmail.com>
> wrote:
>
>
>
> > Touché!  Point taken on the commercial software.... :)
>
> > As a fall-back plan, there is an acceptable workaround.  I can
> > explicitly convert the floats I receive into Decimals.  Based on
> > Massimo's post, it looks like this will only be an issue for money
> > fields returned from a .executesql statement.  For all other queries
> > where I can leverage the DAL, I think web2py will handle things just
> > fine.
>
> > I'm going to post a message to theFreeTDSmessage board and see what
> > I can learn.
>
> > On Fri, Jul 30, 2010 at 11:08 AM, Michele Comitini
>
> > <michele.comit...@gmail.com> wrote:
>
> > > 2010/7/30 mwolfe02 <michael.joseph.wo...@gmail.com>
>
> > >> Ideally, I'd like to avoid having to purchase a commercial product.
>
> > > Alas you are using a commercial product.
> > > indeed this is what you should look at:
> > >http://www.egenix.com/products/python/mxODBCConnect/
>
> > > That said it could be just a problem with the python adapter offreetds
> > > pymssql.
>
> > >> Plus, I don't think it would work.  mxODBC appears to be a replacement
> > >> for pyodbc.  It looks like mxODBC usesFreeTDSjust like pyodbc.  The
> > >> problem appears to be withFreeTDS, so mxODBC doesn't look like it
> > >> would be a fix for my particular problem.  In fact, mxODBC says as
> > >> much itself:
>
> > >> (From the mxODBC change log, Changes from 2.0.7 to 3.0.0:
> > >>http://www.egenix.com/products/python/mxODBC/changelog.html)
>
> > >> "Added new experimental subpackage mx.ODBC.FreeTDSwhich allows
> > >> connecting to MS SQL Server from Unix. This is still far from even
> > >> being called alpha due to the current lack of implementation support
> > >> of many important ODBC APIs in theFreeTDSODBC driver."
>
> > >> The problem still seems to beFreeTDS.
>
> > >> On Jul 30, 9:42 am, Michele Comitini <michele.comit...@gmail.com>
> > >> wrote:
> > >> > you can try with mxodbchttp://www.egenix.com/products/python/mxODBC/
>
> > >> > 2010/7/30 mwolfe02 <michael.joseph.wo...@gmail.com>
>
> > >> > > For background, refer to related questions on SO:
> > >> > >http://stackoverflow.com/questions/3364699/
> > >> > >http://stackoverflow.com/questions/3371795/
>
> > >> > > I'm developing my app on Windows, but will be deploying it on a Linux
> > >> > > server.  The following lines are from the top of my db.py:
>
> > >> > > if os.name=='posix':  #Ubuntu
> > >> > >    db =
> > >> > > DAL('mssql://user:p...@10.0.8.30/TaxDB?DRIVER={FreeTDS}<http://user:p...@10.0.8.30/TaxDB?DRIVER=%7BFreeTDS%7D>
> > >> > > ',
> > >> > > migrate=False)
> > >> > > elif os.name=='nt':   #Windows
> > >> > >    db = DAL('mssql://u...@127.0.0.1/TaxDB_Dev?
> > >> > > Trusted_Connection=Yes', migrate=False)
>
> > >> > > The problem I am running into is that on Windows, my MS SQL money
> > >> > > fields are returned as Python Decimals.  However, on Linux, those 
> > >> > > same
> > >> > > fields are returned as floats.  I think the issue is withFreeTDS.
> > >> > > The above lines are the _only_ lines that are different between my
> > >> > > production and development versions.  Obviously, the environments
> > >> > > themselves are vastly different.
>
> > >> > > Is there an alternative toFreeTDSto connect to SQL Server from
> > >> > > Linux?  Do I need to provide some additional info in my connection
> > >> > > string?  Am I just stuck because I'm accessing SQL Server from Linux?
>
> > >> > > Thanks in advance for any insight.

Reply via email to