IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sybase Discussion :

[Sybase] Recuperer la ligne d'enregistrement voulue ASA7


Sujet :

Sybase

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2003
    Messages : 87
    Par défaut [Sybase] Recuperer la ligne d'enregistrement voulue ASA7
    Bonjour,

    Voilà, mon problème, via une requête je recupère par exemple 5 lignes d'enregistrements. Je souhaiterai que ma nouvelle requête (la même en fait) me retourne qu'une seule ligne à la position désirée...en fait, je cherche la fonction identique à LIMIT de PHP ....

    D'après la doc, et c'est le seul élément que j'ai trouvé, je dois utiliser FETCH après avoir declarer un curseur sur ma requête...sauf que je n'y arrive pas, je me fais toujours jetter à cause de ma syntaxe ou autres.(et je ne suis même pas sûr que ça soit compatible avec SqlAnywhere 7...(ça me parait quand même bizzare que l'on ne puisse pas faire cela simplement).

    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    Les curseurs marchent sur ASA. Refilez-nous votre code pour qu'on puisse au moins vous dire où ça plante.

    En versions récentes, TOP n marche aussi
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2003
    Messages : 87
    Par défaut
    ok, ok désolé.

    Voici ma requete, mais je ne suis pas du tout sûr de la syntaxe, j'ai essayé plusieurs méthodes et au mieux par rapport à ce que j'ai trouvé.

    Test pour recuperer la seconde ligne des enregistrement retournés par la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    EXEC SQL DECLARE mon_curseur CURSOR FOR
    select * from  t_jours, t_themes LEFT OUTER JOIN t_groupes_themes on t_themes.tf_t_nom=t_groupes_themes.tf_t_nom
    where t_themes.tf_j_date = t_jours.tf_j_date
    and t_jours.tf_j_date='2005-07-02'
    EXEC SQL OPEN mon_curseur
    EXEC SQL FETCH mon_curseur
    INTO :2;
    Un grand merci à toi si tu peux me debloquer...(car je galère et je suis vraiment juste niveau timing..en fait, on m'a fait changer ma bdd (completement) en fonction de ce qui était prevu au départ..et il y a une pré presentation bientôt :sweat: )

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2003
    Messages : 87
    Par défaut
    Au fait, effectivement j'ai essayé TOP(n) et FIRST, ça marche, mais ça ne va pas dans mon cas (car ne me permet pas de recuperer le la ligne voulu hormis la première...et malheureusement, je ne peux pas trier pour que la ligne voulue apparaisse en premier)

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2003
    Messages : 87
    Par défaut
    Visiblement, la solution ne doit pas être aussi évidante qu'il n'y parait.

    Bon alors, j'ai une autre optique, mais là aussi j'ai un problème, mais la cause est surement déjà définie et connue

    En fait, j'ai ajouté un numero unique chronologique avec number(*), soit la requête devient : (de mémoire, je ne suis pas devant le bon PC)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select *,number(*) as numero from  t_jours, t_themes LEFT OUTER JOIN t_groupes_themes on t_themes.tf_t_nom=t_groupes_themes.tf_t_nom 
    where t_themes.tf_j_date = t_jours.tf_j_date
    J'ai bien ma colonne "numero" avec comme valeur 1 pour le 1er enregistrement, 2, pour le second, 3 pour le troisième, etc.
    Donc, je me suis dit, si j'ajoute une clause , ça devrait être bon.
    Hors, à ma plus grande surprise, la requête ne retourne rien.
    J'ai essayé avec une table basique d'une seule colonne, j'ai bien le bon affichage mais la clause sur la valeur de numero ne renvoi rien .
    J'ai casté en int mais nada aussi ...

    J'ai aussi essayé une vue...et toujours pareil, le champs numero est bien présent et renseigné correctement, dumoins d'après ce que je vois, mais impossible de faire une clause dessus

    Merci de votre aide car vraiment je suis

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2003
    Messages : 87
    Par défaut
    Vraiment personne pour m'aider et me sortir d'affaire ?

  7. #7
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    Si vous avez une ligne avec un select sur la table, mais que vous ne l'avez plus lors de la jointure avec l'autre table, c'est que c'est votre jointure qui péclotte.

    J'ai noté que vous faisiez une jointure externe (OUTER JOIN). Votre condition se porte-t-elle sur la table externe ou interne ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2003
    Messages : 87
    Par défaut
    Si si, mais jointure me renvoie bien les lignes escomptées, le problème ne doit pas être dans ma jointure.
    Je voudrais simplement récuperer la ligne 'n' des enregistrements retournés, car je ne peux le faire avec une clause "WHERE".

    ...Mais je ne trouve pas la solution

  9. #9
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    Donnez-nous un exemple de sql avec ce que vous obtenez et ce que vous souhaitez obtenir. Ce sera plus clair.
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2003
    Messages : 87
    Par défaut
    Escuse moi (tu peux me tutoyer) pour mon retard dans ma réponse, mais le temps jouant contre moi, j'ai dû abandonner ma nouvelle base au profit de l'ancienne pour la semaine dernière.

    Par contre, en sqlanywhere7, je ne suis pas arrivé à recuperer la ligne voulu avec une fonction SQL, mais dans l'aide du 9 sur le site WEB de sybase, une fonction le permettant est disponible (je viens de regarder et evidement je n'arrive pas à la retrouver...), mais elle n'existait pas pour la version 7.

    Du coup, je suis passé par un autre moyen, j'ai créé une vue et j'ai créé une colonne v_sa_id qui regroupe les clé primaires de mes 2 tables de jointure.

    Mais là encore, pb, lorsque j'affiche toutes les données de la vue, toutes les données apparaissent bien, mais j'ai un problème pour faire une clause WHERE.

    Dans interactive SQL, lors de l'execution de ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM "DBA"."V_SelectionAnimation"
    Toutes mes données s'affichent bien, donc j'en conclue que ma jointure et vue sont bien définies.

    Lorsque je fais ce select avec la clause WHERE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM "DBA"."V_SelectionAnimation" WHERE v_sa_id="THEME1GROUPE1"
    J'ai bien les bonnes données qui sont retourné. THEME1 fait parti de la clé primaire de la table T_THEMES et GROUPE1 de clé primaire de la table T_GROUPES_THEMES.

    Par contre, lors que je fais simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM "DBA"."V_SelectionAnimation" WHERE v_sa_id="THEMESEUl"
    Aucune valeur n'est retournée, pourtant cette valeur est bien visible lorsque l'on execute la vue, mais je ne peux selectionner les valeurs en ralation avec, ne serait-ce pas du fait que je concatène avec un NULL (car aucune correspondance est dans T_GROUPES_THEMES, d'où ma jointure).

    Sincerement, je comprend que tout peut paraitre flou dans mon explication, car c'est simple dans le resultat mais compliqué à expliquer, sutout que je n'arrive pas à comprendre comment d'un côté, ça sort bien avec le select, mais lorsque je fais la clause WHERE, ça ne me retourne rien (j'ai essayé avec un LIKE, dans ce cas, tous les enregistrements dans la concaténation est du genre THEMEXGROUPEX sont retourné, mais seulement THEMESEULX ne sont pas retournés...)

    J'espere que tu comprends et que tu pourras m'éclairer...
    Merci de ta lecture

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2003
    Messages : 87
    Par défaut
    Au fait, j'ai contourné mon pb.

    Je me rappelai plus que la concaténation d'une valeur avec un NULL donnait NULL...c'est ça qui me jouait un tour dans mon dernier pb énoncé.
    Du coup, si modifié mon code pour que si jamais ce paramètre est nul, je ne concatène pas.

    Sinon, pour ma curiosité, toujours pas trouvé pour selectionner simplement la Xième ligne d'un resultat lors d'une requête (identique à LIMIT par exemple en PHP).
    D'après la doc sur le WEB, c'est une nouveauté de la version 9, moi je tourne sous la 7, mais bon, ça me parait bizzare que cela ne soit pas possible quand même... :-/

Discussions similaires

  1. [VB.NET] Recuperer numero ligne dans DATAGRID apres event
    Par stephane93fr dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/01/2005, 12h58
  2. Recuperer la ligne de commande du DOS
    Par Kernel32.DLL dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 23/08/2004, 16h50
  3. Réponses: 4
    Dernier message: 21/05/2004, 10h13
  4. [SYBASE] nombre de ligne impactée par UPDATE
    Par metheorn dans le forum Sybase
    Réponses: 3
    Dernier message: 14/05/2004, 17h47
  5. Réponses: 3
    Dernier message: 22/02/2004, 21h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo