[python-sybase] still problem with pending results

Ralph Heinkel heinkel at cenix-bioscience.com
Tue, 28 May 2002 15:18:32 +0200


Hello,

some time ago in april I've once sent a mail to this group. However
I still do not get things to run properly. I have tried to following
code with python2.2 on Linux, Sybase 11.9.2, with python-sybase
adapter V0.34 and V0.35pre2. Both fail with slightly different
messages. What I actually want to do is just to close the cursor c1,
open a new cursor c2 and then run the correct SQL there. But this
also fails which is why I tried to do what Harri Pasanen suggested -
unfortunately without success. Any ideas?

Ralph

---------------------------------------------------------
import Sybase

db = Sybase.connect('monkey', 'cenix_admin', 'blabli1', 'cenix_lab')
c1 = db.cursor()
try:
    # produce an error - THE TABLE 'DUMMY' DOES NOT EXIST
    c1.execute('select * from dummy')
except:
    print 'select failed'

c1.close()
db.commit()

Traceback (most recent call last):
   File "<stdin>", line 1, in ?
   File "/usr/local/lib/python2.2/site-packages/Sybase.py", line 603, in 
commit
     self.execute('commit transaction')
   File "/usr/local/lib/python2.2/site-packages/Sybase.py", line 633, in 
execute
     self._raise_error(Error, 'ct_send')
   File "/usr/local/lib/python2.2/site-packages/Sybase.py", line 525, in 
_raise_error
     raise exc(text)
Sybase.Error: ct_send
Layer: 1, Origin: 1
ct_cmd_drop(): user api layer: external error: This routine can be 
called only if the command
structure is idle.
Layer: 1, Origin: 1
ct_send(): user api layer: external error: This routine cannot be called 
because another command structure has results pending.




Harri Pasanen wrote:
> On Tue, 09 Apr 2002 10:13:34 +0200 Ralph Heinkel <rh@cenix-bioscience.com> wrote:
> 
> 
>>Hello,
>>
>>every once in a while (especially after having sybase server problems)
>>I get the following message:
>>
>>['ct_send', {'status': 0, 'sqlstate': 'ZZZZZ', 'osnumber': 0, 
>>'osstring': '', 'msgstring': 'ct_send(): user api layer: external error: 
>>This routine cannot be called because another command structure has 
>>results pending.', 'msgnumber': 16843057, 'severity': 1}]
>>
>>
>>What would be the adequate reaction on this? (How do I detect this -
>>the the msgnumber 16843057 unique to this error?)
>>
>>Thanks,
>>
>>Ralph
>>
> 
> 
> I presume you are seeing the message in the exception handler for
> Sybase.Error ?
> 
> If you can, you could try  closing the open cursors, call db.commit() and
> then restart the operations.
> 
> Calling db.commit() in general seems to be a good idea for the Sybase
> module (v0.34).  I rearranged my code to call db.commit() before calling
> stored procedures, otherwise those calls sometimes silently failed
> producing wrong results, without throwing any exceptions.
> 
> 
> -Harri
> 
> 



-- 
------------------------------------------------------------------
Ralph Heinkel                  Cenix Bioscience GmbH
IT-Unit Director               Tel  : +49 351 210 2548
Pfotenhauerstr. 108            Fax  : +49 351 210 1309
01307 Dresden, Germany         eMail: heinkel@cenix-bioscience.com