fabriceMerc | bonjour;
Code :
- public class ListeFamillesMetiersRqt implements IListeFamillesMetiersRqt,
- ListeFamillesMetiersEnum {
- private final String LOG_FILE = "log_accesbase_gpec";
- public ListeFamillesMetiersRqt() {
- }
- public IResultatRqt chercherListeFamilles (String _anneeTravail,
- String _rech,
- int _type_rech,
- boolean _effectif,
- String _typeComptage,
- int _numPage,
- int _nbRcdParPage) throws SQLException {
- Statement stmt = null;
- Connection conn = null;
- ResultSet rs = null;
- String requete = "";
- IResultatRqt resultatRqt = null;
- _rech=AutresOutils.getApostrophe(_rech);
- try {
- // prépare le statement
- StringBuffer buf = new StringBuffer(100);
- 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 " );
- if (_effectif && _typeComptage == TYPE_COMPTAGE_POSTE) {
- buf.append(",tmp.effectif effectifPoste,tmp2.effectif effectifEmploi " );
- }
- else if (_effectif && _typeComptage == TYPE_COMPTAGE_EMPLOI){
- buf.append(",tmp2.effectif effectifEmploi " );
- }
- buf.append ("FROM dtable famille " );
- buf.append ("LEFT OUTER JOIN dtable metier ON famille.id = metier.lien " );
- buf.append ("LEFT OUTER JOIN dtable emploi ON metier.id = emploi.lien " );
- buf.append ("LEFT OUTER JOIN dtable poste ON emploi.id = poste.lien " );
- if (_effectif &&
- (_typeComptage == TYPE_COMPTAGE_EMPLOI ||
- _typeComptage == TYPE_COMPTAGE_POSTE)) {
- buf.append ("LEFT OUTER JOIN ( " );
- buf.append ("SELECT emploi.id emploiid, count(*) effectif " );
- buf.append ("FROM dtable famille, dtable metier, dtable emploi, pers_v volet_personne " );
- buf.append ("WHERE famille.nom_table = 'NOMGPE0' " );
- buf.append ("AND famille.id = metier.lien " );
- buf.append ("AND metier.id = emploi.lien " );
- buf.append ("AND emploi.id = volet_personne.id_table " );
- if (_rech.compareTo("*" ) != 0) {
- if (_type_rech == PAR_FAMILLE) {
- buf.append (" AND famille.des like '" );
- }
- else if (_type_rech == PAR_METIER) {
- buf.append (" AND metier.des like '" );
- }
- else if (_type_rech == PAR_EMPLOI) {
- buf.append (" AND emploi.des like '" );
- }
- else if (_type_rech == PAR_POSTE) {
- buf.append (" AND poste.des like '" );
- }
- buf.append (_rech+"%'" );
- }
- buf.append ("GROUP BY emploi.id) tmp2 " );
- buf.append ("ON tmp2.emploiid = emploi.id " );
- }
- if (_effectif && _typeComptage == TYPE_COMPTAGE_POSTE) {
- buf.append ("LEFT OUTER JOIN ( " );
- buf.append ("SELECT poste.id posteid, count(*) effectif " );
- buf.append ("FROM dtable famille, dtable metier, dtable emploi, dtable poste, pers_v volet_personne " );
- buf.append ("WHERE famille.nom_table = 'NOMGPE0' " );
- buf.append ("AND famille.id = metier.lien " );
- buf.append ("AND metier.id = emploi.lien " );
- buf.append ("AND emploi.id = poste.lien " );
- buf.append ("AND poste.id = volet_personne.id_table " );
- if (_rech.compareTo("*" ) != 0) {
- if (_type_rech == PAR_FAMILLE) {
- buf.append (" AND famille.des like '" );
- }
- else if (_type_rech == PAR_METIER) {
- buf.append (" AND metier.des like '" );
- }
- else if (_type_rech == PAR_EMPLOI) {
- buf.append (" AND emploi.des like '" );
- }
- else if (_type_rech == PAR_POSTE) {
- buf.append (" AND poste.des like '" );
- }
- buf.append (_rech+"%'" );
- }
- buf.append ("GROUP BY poste.id ) tmp " );
- buf.append ("ON tmp.posteid = poste.id " );
- }
- buf.append ("WHERE famille.nom_table = 'NOMGPE0' " );
- if (_rech.compareTo("*" ) != 0) {
- if (_type_rech == PAR_FAMILLE) {
- buf.append (" AND famille.des like '" );
- }
- else if (_type_rech == PAR_METIER) {
- buf.append (" AND metier.des like '" );
- }
- else if (_type_rech == PAR_EMPLOI) {
- buf.append (" AND emploi.des like '" );
- }
- else if (_type_rech == PAR_POSTE) {
- buf.append (" AND poste.des like '" );
- }
- buf.append (_rech+"%'" );
- }
- buf.append (" ORDER BY famille.des, metier.des, emploi.des, poste.des" );
- requete = buf.toString();
- conn = ConnectionDriver.getConnectionDriver(_anneeTravail);
- stmt = conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
- rs = stmt.executeQuery(requete);
- resultatRqt = new ResultatRqt (rs, _numPage, _nbRcdParPage);
- }
- catch (SQLException ex) {
- String[] data = {MessageLogger.formatData ("Requête", requete)};
- MessageLogger.writeMessage(LOG_FILE, 44, data, ex);
- throw ex;
- }
- finally {
- try {
- if (stmt != null) stmt.close();
- if (conn != null) conn.close();
- }
- catch (SQLException ex) {
- MessageLogger.writeMessage(LOG_FILE, 45, null, ex);
- }
- }
- return resultatRqt;
- }
- }
|
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
|