PEPPLER.ORG
Michael Peppler
Sybase Consulting
Menu
Home
Sybase on Linux
Install Guide for Sybase on Linux
General Sybase Resources
General Perl Resources
Freeware
Sybperl
Sybase::Simple
DBD::Sybase
BCP Tool
Bug Tracker
Mailing List Archive
Downloads Directory
FAQs
Sybase on Linux FAQ
Sybperl FAQ
Personal
Michael Peppler's resume

sybperl-l Archive

Up    Prev    Next    

From: Michael Peppler <mpeppler at peppler dot org>
Subject: Re: client api layer error
Date: Jun 6 2001 2:19PM

Patrick S Leung writes:
 > Dear all,
 > 
 > I use a perl script to fetch data from sever sybase ase dbs.  The perl 
 > scripts are on one linux machine while the db is on another linux 
 > machine.  All but one sybase server gave me the open client error.  I 
 > got the error even if I run the perl script on the same machine. 
 > 
 > Open Client Message:
 > Message number:  LAYER = (1) ORIGIN = (1)  SEVERITY = (1) NUMBER = (163)
 > Message String:  ct_results():  user api layer: external error:  This 
 > routine cannot be called until all fetachable results have been 
 > completely processed.

Your perl code is almost certainly incorrect. You *must* call
ct_fetch() within the ct_results() loop for *all* result types that
return rows, even if there are no rows in that result set.

Specifically you need to do something like this (semi-pseudocode):

ct_execute(...);
while(ct_results($restype) == CS_SUCCEED) {
    next unless ct_fetchable($restype);
    while(@d = ct_fetch) {
        ....
    }
}

If you don't want to have to mess with all that I strongly suggest you
take a look at Sybase::Simple, where you have methods that will hide
all this complexity from you.

Michael
-- 
Michael Peppler - Data Migrations Inc. - mpeppler@peppler.org
http://www.mbay.net/~mpeppler - mpeppler@mbay.net
International Sybase User Group - http://www.isug.com
Sybase on Linux mailing list: ase-linux-list@isug.com