Bonjour,
J'ai besoin, pour mon application, d'utiliser une procédure stockée qui doit me renvoyer X enregistrements :
Dans D7 elle est appellée comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 1> SET TERM ^; 2> CREATE PROCEDURE 3> VA_CHERCHER( XROWS INTEGER , XMOT VARCHAR(30), XRUB INTEGER ) 4> RETURNS ( 5> ID INTEGER, 6> TITRE VARCHAR(100), 7> RUB INTEGER, 8> COL1 VARCHAR(20), 9> COL2 BLOB SUB_TYPE 1 SEGMENT SIZE 80, 10> COL3 INTEGER, 11> ) 12> AS 13> BEGIN 14> IF(XROWS < 1) THEN EXIT; 15> FOR SELECT 16> DISTINCT TITRE , ID, RUB, COL1, COL2, COL3 17> FROM TABLE1 18> WHERE RUB = :XRUB AND TITRE LIKE :XMOT 19> INTO TITRE , ID, RUB, COL1, COL2, COL3 20> DO 21> BEGIN 22> SUSPEND; 23> XROWS = XROWS - 1; 24> IF (XROWS < 1) THEN EXIT; 25> END 26> END^ 27> SET TERM ; ^
Ma procédure ne me renvoit rien. Il n'y a aucun message d'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DataMod.IBQuery1.SQL.Clear; DataMod.IBQuery1.SQL.Add( 'SELECT * FROM VA_CHERCHER (10, '+QuotedStr('%'+MotRecherche+'%' )+', 1)'); DataMod.IBQuery1.Prepare; DataMod.IBQuery1.Open;
Si je supprime (ou passe en commentaire) la ligne 18 de la procédure stockée ( Clause WHERE ...) elle me renvoit 10 résultats !
J'ai meme essayé en spécifiant un mot qui est également dans un TITRE et un numero de rubrique egalement dans la table
(vérifié avec IBConsole)
J'ai aussi essayé en la mettant directement DANS la procédure stockée :
Conclusion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // j'ai volontairement limité le champs de la recherche à la colonne RUB , sans spécifier le mot recherché (la clause AND TITRE.... est enlevée pour le test) 18> WHERE RUB = 1
J'arrive à passer la variable XROWS mais pas les variables XMOTS et XRUB
Notes :
- Les N° de lignes (xx>) sont ici pour la compréhension...
- La requete SQL est effectuée au cours d'une TRANSACTION (IBTransaction.Commit;except >IBTransaction.Rollback![]()
- La BD (IB6 GPL) est CONNECTED
- SQLDialect = 3
- J'ai lu l'excellent tuto sur les Stored procedures
- J'ai déja cherché partout ???
- Cela fait déja + de 11 heures que je suis dessus..
- Je vais me coucher![]()
Quelqu'un peut-il maider SVP ?
Cordialement
N1bus
Partager