[Erreur ODBC] Etat du curseur non valide

Etat du curseur non valide [Erreur ODBC] - SQL/NoSQL - Programmation

Marsh Posté le 15-09-2003 à 14:38:23    

bonjour;
 

Code :
  1. public class ListeFamillesMetiersRqt implements IListeFamillesMetiersRqt,
  2.                                                 ListeFamillesMetiersEnum {
  3. private final String LOG_FILE = "log_accesbase_gpec";
  4.     public ListeFamillesMetiersRqt() {
  5.     }
  6.     public IResultatRqt chercherListeFamilles (String _anneeTravail,
  7.                                                 String _rech,
  8.            int _type_rech,
  9.            boolean _effectif,
  10.            String _typeComptage,
  11.               int _numPage,
  12.               int _nbRcdParPage) throws SQLException {
  13.  Statement stmt = null;
  14.  Connection conn = null;
  15.  ResultSet rs = null;
  16.  String requete = "";
  17.  IResultatRqt resultatRqt = null;
  18.         _rech=AutresOutils.getApostrophe(_rech);
  19.  try {
  20.   // prépare le statement
  21.      StringBuffer buf = new StringBuffer(100);
  22.   buf.append ("SELECT famille.id idfamille, famille.code codefamille, famille.des desfamille, famille.com comfamille, metier.id idmetier, metier.code codemetier, metier.des desmetier, metier.com commetier, emploi.id idemploi, emploi.code codeemploi, emploi.des desemploi, emploi.com comemploi, poste.id idposte, poste.code codeposte, poste.des desposte, poste.com composte " );
  23.   if (_effectif && _typeComptage == TYPE_COMPTAGE_POSTE) {
  24.    buf.append(",tmp.effectif effectifPoste,tmp2.effectif effectifEmploi " );
  25.   }
  26.   else if (_effectif && _typeComptage == TYPE_COMPTAGE_EMPLOI){
  27.    buf.append(",tmp2.effectif effectifEmploi " );
  28.   }
  29.   buf.append ("FROM dtable famille " );
  30.             buf.append ("LEFT OUTER JOIN dtable metier ON famille.id = metier.lien " );
  31.             buf.append ("LEFT OUTER JOIN dtable emploi ON metier.id = emploi.lien " );
  32.             buf.append ("LEFT OUTER JOIN dtable poste ON emploi.id = poste.lien " );
  33.   if (_effectif &&
  34.    (_typeComptage == TYPE_COMPTAGE_EMPLOI ||
  35.     _typeComptage == TYPE_COMPTAGE_POSTE)) {
  36.    buf.append ("LEFT OUTER JOIN ( " );
  37.          buf.append ("SELECT emploi.id emploiid, count(*) effectif " );
  38.    buf.append ("FROM dtable famille, dtable metier, dtable emploi, pers_v volet_personne " );
  39.    buf.append ("WHERE famille.nom_table = 'NOMGPE0' " );
  40.    buf.append ("AND famille.id = metier.lien " );
  41.    buf.append ("AND metier.id = emploi.lien " );
  42.    buf.append ("AND emploi.id = volet_personne.id_table " );
  43.    if (_rech.compareTo("*" ) != 0) {
  44.     if (_type_rech == PAR_FAMILLE) {
  45.      buf.append (" AND famille.des like '" );
  46.     }
  47.     else if (_type_rech == PAR_METIER) {
  48.      buf.append (" AND metier.des like '" );
  49.     }
  50.     else if (_type_rech == PAR_EMPLOI) {
  51.      buf.append (" AND emploi.des like '" );
  52.     }
  53.     else if (_type_rech == PAR_POSTE) {
  54.      buf.append (" AND poste.des like '" );
  55.     }
  56.    buf.append (_rech+"%'" );
  57.    }
  58.    buf.append ("GROUP BY emploi.id) tmp2 " );
  59.    buf.append ("ON tmp2.emploiid = emploi.id " );
  60.   }
  61.     if (_effectif && _typeComptage == TYPE_COMPTAGE_POSTE) {
  62.       buf.append ("LEFT OUTER JOIN ( " );
  63.    buf.append ("SELECT poste.id posteid, count(*) effectif " );
  64.          buf.append ("FROM dtable famille, dtable metier, dtable emploi, dtable poste, pers_v volet_personne " );
  65.          buf.append ("WHERE famille.nom_table = 'NOMGPE0' " );
  66.          buf.append ("AND famille.id = metier.lien " );
  67.       buf.append ("AND metier.id = emploi.lien " );
  68.          buf.append ("AND emploi.id = poste.lien " );
  69.          buf.append ("AND poste.id = volet_personne.id_table " );
  70.    if (_rech.compareTo("*" ) != 0) {
  71.     if (_type_rech == PAR_FAMILLE) {
  72.      buf.append (" AND famille.des like '" );
  73.     }
  74.     else if (_type_rech == PAR_METIER) {
  75.      buf.append (" AND metier.des like '" );
  76.     }
  77.     else if (_type_rech == PAR_EMPLOI) {
  78.      buf.append (" AND emploi.des like '" );
  79.     }
  80.     else if (_type_rech == PAR_POSTE) {
  81.      buf.append (" AND poste.des like '" );
  82.     }
  83.    buf.append (_rech+"%'" );
  84.    }
  85.          buf.append ("GROUP BY  poste.id ) tmp " );
  86.       buf.append ("ON tmp.posteid = poste.id " );
  87.      }
  88.   buf.append ("WHERE famille.nom_table = 'NOMGPE0' " );
  89.      if (_rech.compareTo("*" ) != 0) {
  90.    if (_type_rech == PAR_FAMILLE) {
  91.     buf.append (" AND famille.des like '" );
  92.    }
  93.    else if (_type_rech == PAR_METIER) {
  94.     buf.append (" AND metier.des like '" );
  95.    }
  96.    else if (_type_rech == PAR_EMPLOI) {
  97.     buf.append (" AND emploi.des like '" );
  98.    }
  99.    else if (_type_rech == PAR_POSTE) {
  100.     buf.append (" AND poste.des like '" );
  101.    }
  102.    buf.append (_rech+"%'" );
  103.      }
  104.   buf.append (" ORDER BY famille.des, metier.des, emploi.des, poste.des" );
  105.      requete = buf.toString();
  106.   conn = ConnectionDriver.getConnectionDriver(_anneeTravail);
  107.   stmt = conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  108.   rs   = stmt.executeQuery(requete);
  109.   resultatRqt = new ResultatRqt (rs, _numPage, _nbRcdParPage);
  110.  }
  111.  catch (SQLException ex) {
  112.      String[] data = {MessageLogger.formatData ("Requête", requete)};
  113.      MessageLogger.writeMessage(LOG_FILE, 44, data, ex);
  114.      throw ex;
  115.     }
  116.     finally {
  117.      try {
  118.       if (stmt != null)       stmt.close();
  119.       if (conn != null)       conn.close();
  120.      }
  121.      catch (SQLException ex) {
  122.       MessageLogger.writeMessage(LOG_FILE, 45, null, ex);
  123.      }
  124.     }
  125.  return resultatRqt;
  126. }
  127. }


 
lorsque que je fait une recherche qui ne revois rien (pas d'enregistrement) dans le cas d'un comptage (c'est à dire _effectif = true), j'ai une exception généré qui me renvoie "Etat du curseur non valide".
J'ai cherché sur le net et je n'ai pas trouvé de réponse, dans l'aide de SQL serveur cette erreur est générée lorsque  
 
Dans SQL Server Enterprise Manager, vous pouvez recevoir le message d'erreur « État de curseur non valide » si Microsoft® SQL Server? manque de ressources lors d'une tentative d'enregistrement de tables sélectionnées ou d'un diagramme de base de données. Cette erreur est renvoyée en raison d'un manque d'espace dans la base de données ou dans le journal des transactions pour achever le processus d'enregistrement. Pour remédier à ce problème, vérifiez si la base de données ou le journal des transactions sont pleins.
 
je pense que l'érreur viens du fait que les select imbriqués dans les left outer join ne renvoient rien.
 
merci  
 


---------------
L'été il fait bo
Reply

Marsh Posté le 15-09-2003 à 14:38:23   

Reply

Marsh Posté le 15-09-2003 à 14:52:34    

Ton diagnostic est courant chez nous, mais dans ce cas, on a cette erreur directement, et rien à propos du curseur. Ca voudrait donc dire: pas assez d'espace pour la journalisation de SQL Serveur. Faut agrandir la taille réservée au journal [:spamafote]
 
Sinon, je pense pas que tu aies une erreur à cause d'un join qui ne renvoie rien. A confirmer.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed