![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
Andry
Merci du fond du coeur Barbibulle, j'ai encore 2 questions :
1° Est ce que je peux mettre NBR_LIGNE en paramètre ?
oui bien sur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
SET TERM !!;
CREATE PROCEDURE T_HISTORICS_S (NBR_LIGNE INTEGER)
RETURNS (
HS_DT DATE,
HS_NO INTEGER,
HS_TM TIME,
HS_DS_NO INTEGER,
HS_US_NO SMALLINT)
AS
BEGIN
FOR SELECT HS_DT, HS_NO, HS_TM, HS_DS_NO, HS_US_NO
FROM T_HISTORICS
ORDER BY HS_NO desc
INTO :HS_DT, :HS_NO, :HS_TM, :HS_DS_NO, :HS_US_NO
DO
BEGIN
NBR_LIGNE = NBR_LIGNE-1;
SUSPEND;
if (NBR_LIGNE = 0) then
EXIT;
END
END!!
SET TERM ;!! |
![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
Andry
2° comment utiliser ce procedure sous Delphi maintenant.
J'ai l'habitude de travailler avec des Procedure qui me renvoi qu'une seule valeur mais pas plusieurs
Comme tu l'a remarqué, je voulais avoir les resultats de ce procedure et le mettre dans un Memo pour consultation d'historique
Utilisation :
Select HS_DT, HS_NO, HS_TM, HS_DS_NO, HS_US_NO FROM T_HISTORICS_S(100);
et si tu veux toutes les valeurs de la table :
Select HS_DT, HS_NO, HS_TM, HS_DS_NO, HS_US_NO FROM T_HISTORICS_S(null);
Dans Delphi :
mettre l'ordre suivant dans un TIBDataSet ou TIBQuery ou TIBSQL
Select HS_DT, HS_NO, HS_TM, HS_DS_NO, HS_US_NO FROM T_HISTORICS_S(:NBR);
puis initaliser le parametre :NBR comme ceci :
1 2 3
| IBxxxx.Close;
IBxxxx.ParamByName('NBR').AsInteger := 100;
IBxxxx.Open; |
Tu peux également utiliser le TIBStoredProc dans ce cas tu n'as pas besoin de donner un ordre SQL mais juste le nom de la procédure stockée et de renseigner le paramètre de la même manière.
Pour ce qui est de l'exploitation du résultat je te suggère de regarder dans l'aide en ligne ou les bouquins de Delphi. et si tu n'y arrives pas vas poser tes questions dans le forum Delphi Sgbd qui est plus adapté.
Pour te mettre sur la piste : une fois que ta requete est lancée (ou procédure stockée exécutée) tu vas devoir boucler tant qu'il y a des lignes (test sur IBxxxx.EOF et lire les valeurs des colonnes dans ta boucle avec IBxxxx.Fields[0] par exemple oubien avec FieldByName('HS_DT').AsString qui te convertira le tout en string... tu concatènes tes colonnes et ajoute le résultat à ton mémo. Et ne pas oublier de mettre dans ta boucle IBxxxx.next pour lire l'enregistrement suivant...
Voilà de quoi t'exercer...
Partager