Auteur Sujet: impossible lancer une procédure !  (Lu 5962 fois)

plus minus reset

0 Membres et 1 Invité sur ce sujet

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
impossible lancer une procédure !
« le: 03 Décembre 2007 à 14:43:04 »
Bonjour à tous  :grin:

J'essaye de lancer la procédure :

PROC_LISTE_INDIVIDU_ALPHA(I-DOSSIER_I_LETTRE,I_MODE,I_SEXE)

ce que j'interprète comme ceci :

select from PROC_LISTE_INDIVIDU_ALPHA(2,*2,0)

ou

select from PROC_LISTE_INDIVIDU_ALPHA(2,A,2,0
)

en mettant * ou a ou A
selon les règles trouvées sur IBexpert :

I_LETTRE Alpha-que ceux de la lettre

* -tous


or, chaque fois j'ai un message d'erreur

soit à cause du *:

"Token unknown -line 1, columm 45 *"

soit à cause du A :

"column unknown A At line 1, column 45"

Quelqu'un pourrait-il me conseiller ?

Merci et bonne journée  :wink:
« Modifié: 03 Décembre 2007 à 14:48:38 par palimpseste »
 

Hors ligne DDdeBerdeux

impossible lancer une procédure !
« Réponse #1 le: 03 Décembre 2007 à 15:13:41 »
En SQL une chaîne de caractères s'écrit entre simples cotes 'ma chaîne', et dans la clause "select", il faut nommer quels champs doivent être sélectionnés, séparés par une virgule. Pour sélectionner tous les champs de sortie, on peut remplacer la liste par le symbole *
select * from proc_liste_individu_alpha(2,'A',2,0)
devrait marcher pour lister tous les individus du dossier 2, dont le nom commence par la lettre A, qu'ils soient vivants ou morts, et de n'importe quel sexe.
En remplaçant 'A' par '*' tu auras la liste de tous les individus du dossier.
Une autre façon d'opérer avec IBExpert, consiste à ouvrir la procédure (double-cliquer sur son nom dans Database Explorer), puis à en demander l'exécution (son menu Procédure/Exécuter ou F9, ou bouton triangle vert sommet à droite dans la barre d'outil de la fenêtre de la procédure). Dans la fenêtre qui s'ouvre alors, il n'y a plus qu'à mettre la valeur en face du nom de chaque paramètre d'entrée. Dans ce cas, il ne faut pas encadrer une chaîne de caractères de simples cotes (ou apostrophes).
En exécutant la requête suivante dans l'éditeur SQL:
select * from proc_liste_individu_alpha(:I_DOSSIER,:I_LETTRE,:I_MODE,:I_SEXE)
le nom de chaque paramètre étant précédé du symbole :
la même fenêtre s'ouvrira pour demander les valeurs à affecter aux paramètres d'entrée.
A+
André
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
impossible lancer une procédure !
« Réponse #2 le: 03 Décembre 2007 à 16:19:24 »
Merci André  :wink:

1-D'après ta réponse, le problème venait donc du fait que je n'avais pas mis A ou * entre des guillemets SIMPLES. 'A' et  '*' (et non "A" et "*" )

select * from proc_liste_individu_alpha(2,'A',2,0)

select * from proc_liste_individu_alpha(2,'*',2,0)

2-Pour la solution 2 que tu expliques : quand je l'essaye par ex avec la procédure en question (proc_liste_individu_alpha) j'ai le message suivant :

"la pré-complilation a trouvé des erreurs. Compiler quand même ?"

Et si je passe outre (OUI) cela ouvre une autre fenêtre que celle que tu indiques... ???

Par contre, si je lance LISTE_INDIVIDU_PAR_LETTRE (une autre procédure)

cela ouvre bien la fenêtre que tu indiques et là je peux remplir les paramètres.(les chiffres dans I_DOSSIER, I_LETTRE, I_MODE etc)

et là ça fonctionne; j'obtiens bien les 193 noms qui sont dans la base..

3-Autre pb : quand j'active la procédure

select * from proc_liste_individu_alpha(2,'*',2,0) ('*' ="tous" les individus)

Dans la liste que j'obtiens il manque des individus qui figurent pourtant bien dans les fiches... ???

je n'obtiens en effet que 62 sur 193 noms !!!

La preuve : si je lance PROC_ETAT_TOUTES_FICHES(2)
ou comme vu plus haut si je lance LISTE_INDIVIDU_PAR_LETTRE

J' obtiens 193 noms.

Quelle peut en être la raison à ton avis ?
« Modifié: 03 Décembre 2007 à 18:54:04 par palimpseste »
 

Hors ligne DDdeBerdeux

impossible lancer une procédure !
« Réponse #3 le: 03 Décembre 2007 à 18:59:13 »
Si par "la solution 2" tu parles de çà
Une autre façon d'opérer avec IBExpert, consiste à ouvrir la procédure (double-cliquer sur son nom dans Database Explorer), puis à en demander l'exécution (son menu Procédure/Exécuter ou F9, ou bouton triangle vert sommet à droite dans la barre d'outil de la fenêtre de la procédure).
J'ai bien dit le triangle vert et non l'icône en forme d'éclair... Avec cette dernière tu demandes en effet de compiler la procédure, validant d'éventuelles modifications, ce que je ne te conseillerai pas pour le moment...
Point 3: A voir le code de cette procédure, je peux vous dire qu'elle ne peux lister que les individus qui ont un événement naissance déclaré, ce qui explique la différence entre le nombre d'individus listés et le total d'individus dans votre dossier.
A vrai dire, je ne sais pas à quoi peut servir cette procédure. Dans le répertoire, c'est proc_liste_individu qui est utilisée. Elle doit faire partie de ces choses qui ont servi un jour ou d'un essai abandonné, mais que personne n'a osé supprimer au nom du "au cas où quelqu'un s'en servirait". Il reste malheureusement encore des "objets" comme ceux-là qui surchargent inutilement la base.
A+
André
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
impossible lancer une procédure !
« Réponse #4 le: 03 Décembre 2007 à 20:01:01 »
Merci André  :wink:
Oui j'avais dû taper à côté car l'écair et le triangle sont juste côte à côte...

à propos de :

PROC_LISTE_INDIVIDU_ALPHA(I-DOSSIER_I_LETTRE,I_MODE,I_SEXE)

"A voir le code de cette procédure, je peux vous dire qu'elle ne peux lister que les individus qui ont un événement naissance déclaré"

A quoi peut-on le voir ?  ???

en effet, entre :

PROC_LISTE_INDIVIDU_ALPHA
et
PROC_LISTE_INDIVIDU_PAR_LETTRE

où se trouve la différence concernant la date de naissance déclarée ?

« Modifié: 03 Décembre 2007 à 20:10:27 par palimpseste »
 

Hors ligne DDdeBerdeux

impossible lancer une procédure !
« Réponse #5 le: 03 Décembre 2007 à 20:22:44 »
La jointure entre la table INDIVIDU et la table EVENEMENT_IND est interne (il doit y avoir au moins un enregistrement dans EVENEMENT_IND pour chaque enregistrement dans INDIVIDU), au lieu d'être externe gauche (l'enregistrement dans INDIVIDU est émis, même s'il n'y a pas de correspondance dans EVENEMENT_IND).
A+
André
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
impossible lancer une procédure !
« Réponse #6 le: 03 Décembre 2007 à 20:48:40 »
Oui  :wink: mais dans le cas d'espèce il semble s'agir de deux tables "individus"

PROC_LISTE_INDIVIDU_ALPHA
et
PROC_LISTE_INDIVIDU_PAR_LETTRE

Je crois que toi, tu sembles évoquer une autre table :

PROC_EVT_IND

Non ?
« Modifié: 03 Décembre 2007 à 21:17:49 par palimpseste »
 

Hors ligne DDdeBerdeux

impossible lancer une procédure !
« Réponse #7 le: 04 Décembre 2007 à 11:57:10 »
Bonjour,
Ne pas confondre tables et procédures.
Une procédure c'est d'abord du code qui peut manipuler des enregistrements dans une tables et en extraire des informations (mais ce n'est pas obligatoire). Dans ce cas, les informations sont retournées un enregistrement après l'autre, comme le fait une requête, ce qui peut effectivement donner l'impression de lire une nouvelle table. Mais il ne s'agit que d'informations extraites d'une ou plusieurs tables.
A+
André
PS: n'interprêtes pas cette remarque comme un refus de t'aider, ce que je continuerai à faire dans la mesure du possible, en particulier si les questions que tu te poses concernent spécifiquement la structure de la base d'Ancestrologie. Mais la majorité de tes questions concernent le langage SQL et le fonctionnement des objets contenus dans les SGBDR. Pour ces sujets tu trouverais de bien meilleurs pédagogues sur http://sql.developpez.com/ avec ses tutoriels.
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
impossible lancer une procédure !
« Réponse #8 le: 04 Décembre 2007 à 12:53:03 »
Merci André  :wink:

Effectivement, j'ai mélangé "procédure" et "table"... :-\

Tu as raison, cela est de + en + du ressort de SQL et cela devient de + en + ardu et dorénavant j' irais voir du côté du site en question quand j'aurais des questions de ce type.

Néanmoins, si tu en as le temps, peux-tu simplement m' expliquer à l'aide de cet exemple encore "chaud"  de 2 procédures très voisines et de leur table respectives comment tu arrives à en déduire que l'une utilise l' événement de naissance et pas l'autre ?

procédures :

PROC_LISTE_INDIVIDU_ALPHA
et
PROC_LISTE_INDIVIDU_PAR_LETTRE

Tables :
 
EVENEMENT_IND
et
INDIVIDU

En effet, au premier abord dans la structure de ces 2 procédures, rien ne semble démontrer que l'une va prendre en compte ce critère et l'autre pas...

Ou alors mets moi simplement sur la piste.  :wink:
 

Hors ligne DDdeBerdeux

impossible lancer une procédure !
« Réponse #9 le: 04 Décembre 2007 à 13:22:34 »
Pour le comprendre, il faut apprendre à "parler le SQL", au moins quelques mots.
La deuxième procédure utilise une syntaxe plus claire séparant bien la description des jointures (left join ou inner join, on ...=...) de celle des autres critères de filtrages (clause WHERE). Comme dit précédemment, les jointures "left join" utilisées permettent d'émettre des enregistrements avec les champs venant de la table INDIVIDU, même si la jointure avec les autres tables liées par "left join" ne peut se faire.
La syntaxe utilisée dans la première procédure est plus ancienne et moins claire car la jointure entre les tables INDIVIDU et EVENEMENTS_IND est décrite dans la clause WHERE, "ne.ev_ind_clef = enfant.cle_fiche and ne.ev_ind_type = 'BIRT'". Décrite de cette façon, elle implique que si cette condition n'est pas satisfaite, l'enregistrement ne peut être émis.
A+
André
Une application pleinement satisfaisante est toujours complétée par une mise à jour buggée. (Loi des Mises à Jour)
 

Hors ligne palimpseste

  • AncestroJunior
  • ****
  • Messages: 287
  • Remercié: 1 fois
  • Windows 7 64 bits - version 5.130
  • Programme: 2009-00-1004
impossible lancer une procédure !
« Réponse #10 le: 05 Décembre 2007 à 19:21:32 »
Merci André  :wink: