Susan:

That's not a very good error message, it is true.

I suspect that your vendor's ODBC driver may be a bit light on diagnostics.

To extract the most information from the exception, try something like this:
v v v v v start Python code v v v v v
from win32com.client import Dispatch
import pywintypes
conn = Dispatch(r'ADODB.Connection')
def printADOerrors(adoConn):
        j=adoConn.Errors.Count
        if j:
            print 'ADO Errors:(%i)' % j
        for e in adoConn.Errors:
            print 'Description: %s' % e.Description
            print 'Number: %s ' % e.Number
            try:
                print 'Number constant:' % adoErrors[e.Number]
            except:
                pass
            print 'Source: %s' %e.Source
            print 'NativeError: %s' %e.NativeError
            print 'SQL State: %s' %e.SQLState
print '...Testing Sql login...'
conn.Open('DSN=test')
recset, affected = conn.Execute('select blah from foo')  # this should work
print 'affected=',affected
try:
    recset, affected = conn.Execute('select blah from xxxx') # this should
fail
except pywintypes.com_error:
    printADOerrors(conn)
conn.Close()
^ ^ ^ ^ ^ ^ ^ ^ end code ^ ^ ^ ^ ^

I tested this script on my system (The DSN "test" points to my MySQL server)
and got the following:
v v v v v v console output v v v v v
...Testing Sql login...
affected= 1
ADO Errors:(1)
Description: [MySQL][ODBC 5.1 Driver][mysqld-5.0.75-0ubuntu10.2]Table
'test.xxxx' doesn't exist
Number: -2147217865
Source: Microsoft OLE DB Provider for ODBC Drivers
NativeError: 1146
SQL State: S0002
^ ^ ^ ^ ^ ^ ^
which is much easier to understand.

With some luck you too may get something readable.

By the way, you can get the exact same results by:
v v v v v v v v
import adodbapi
print '...Testing Sql login...'
conn = adodbapi.connect('DSN=test')
crsr = conn.cursor()
crsr.execute('select blah from foo') # this should work
print 'affected=',crsr.rowcount
try:
    crsr.execute('select blah from xxxx') # this should fail
except conn.DatabaseError:
    conn.printADOerrors()
conn.close()
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^e
Which is, IMHO, somewhat easier.
--
Vernon
_______________________________________________
DB-SIG maillist  -  DB-SIG@python.org
http://mail.python.org/mailman/listinfo/db-sig

Reply via email to