Monique,
A few things:
1) Is the 'Asychronous' property of the SQL cursor set to .T. (in which case the result set may already be transferring...0 is returned from SQLEXEC).
2) What is 'BatchMode' set to? BatchMode sets up the pending transfer for multiple fetches where you have more than one SELECT issued in the SQLEXEC.
3) If the 'Asynchronous' property is set to true be careful not to issue a SELECT where there is no result set and none is expected (eg. SELECT 'Hello There'). The SQLEXEC will return 0 (executing), and the next SQLEXEC will return 1 indicating the completion of the first call (whatever was issued in the second SQLEXEC will seemingly vanish).
The most important rule of thumb is to use the Asynchronous and BatchMode properties carefully (if you are not retrieving records or the number of results is small enougn always set Asynchronous to .F.). You can get unexpected results if they are incorrectly used.
NOTE: DO not switch Asynchronous off and on too much. Later versions of ODBC seem to get a bit cranky if they have to deal with this.
Good Luck