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

Bases de données Delphi Discussion :

[DELPHI 6.0][ADO] Récupérer le résultat d'une procédure stockée


Sujet :

Bases de données Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut [DELPHI 6.0][ADO] Récupérer le résultat d'une procédure stockée
    Bonjour,

    J'en appel à vous car après avoir rechercher dans la FAQ avec les mots clé ci-dessous et dans le forum qui m'a fournit des réponses mais pas celles que j'attendais, je vous explique:

    J'ai une procédure stockée en SQL SERVEUR version 8.00.194:

    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
    CREATE PROCEDURE exist_client @nom char(15), @prenom char(15) AS
     
    DECLARE @exist INT
     
    SELECT @exist = (SELECT Num
    		  FROM client
    		   WHERE Nom=@Nom
    		    AND Prénom=@prenom)
     
    IF @exist is NULL
    begin
    	RETURN @exist = O 
    end
    else
    begin
    	RETURN @exist
    end
    Cette procédure retourne une variable avec le code d'un client s'il existe dans la base sinon il retourne 0

    En delphi je fais appel à cette procédure avec un objet TADOStoredProc :
    (pour le code suivant je me suis inspiré d'une syntaxe sur une Pti je ne suis absolument pas sur qu'il soit bon)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function TMDD.exist_client(nom,prenom:String) : integer;
    begin
       with Procedure_Stockee.parameters do //Procedure stockee est le nom donné à l'objet TADOStoredProc
        begin
        ParamByName('@RETURN_VALUE').Value;
        ParamByName('@nom').Value:=nom;
        ParamByName('@prenom').Value:=prenom;
        result:=ParamByName('@RETURN_VALUE').Value;
        Procedure_Stockee.ExecProc;
     
        end
    end;
    et enfin l'appel de la procédure ( au passage je n'ai pas oublié de configurer les propriétés connectionString et procédureName de l'objet TADOStoredProc par la connection a sqlserveur et le nom de la procédure) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    codeclient:integer;
    codeclient:=MDD.exist_client(nomclient,prenomclient);
    delphi m'annonce une erreur "correction de type variant incorrecte" lors de l'appel de la procédure (ou plutot fonction)

    J'ai essayé des inttostr et des strtoint mais bon sans succès et peut-être pas au bon endroit

    Une idée ? Merci

  2. #2
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    salut,

    Bon moi j'utilise une variable output dans la sp dont je lui passe zéro comme valeur par défaut Par exemple :
    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
     
    CREATE PROCEDURE exist_client 
    (
    @nom char(15), 
    @prenom char(15) ,
    @Exist int OUTPUT
    )
    AS
     
    SELECT @exist = (SELECT Num
                 	  FROM client
    		   WHERE Nom=@Nom
    		    AND Prénom=@prenom)
     
    IF @exist is NULL
    SET @exist = O 
     
    RETURN (@Exist)
     
    end
    Ensuite dans delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function TMDD.exist_client(nom,prenom:String) : integer;
    Var
     SpExistClient :   TADOStoredProc;
    Begin
      SpExistClient :=  TADOStoredProc.Create(nil);
      SpExistClient .Connection := ADOConnection1;
      SpExistClient .ProcedureName := 'exist_client' ; //le nom de la sp
      SpExistClient .Parameters.Refresh;
      SpExistClient .Parameters.ParamByName('@nom').value :=nom;
      SpExistClient .Parameters.ParamByName('@prenom').value :=prenom;
      SpExistClient .Parameters.ParamByName('@exist').value :=0; //variable  output
      SpExistClient .Prepared := true;
      SpExistClient .ExecProc;
    Et juste apres execution de SpExistClient on recupere la variable exist traiter dans la sp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Result:= SpExistClient .Parameters.ParamByName('@Exist').value;
    SpExistClient.free; 
    End;
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Je plussoie la solution de Freud, normalement l'instruction RETURN d'une procédure stockée ne doit être utilisé que pour renvoyer un code d'erreur personnalisé. S'il y a des valeurs métiers à retourner alors il faut passer par des paramètres de sortie (OUTPUT).

    Néanmoins si l'on veut tout de même capturer la valeur renvoyée par le RETURN il faut s'assurer que le paramètre a dans sa propriété Direction la valeur pdReturnValue. Le nom n'importe pas il me semble.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  4. #4
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    sinon on peut s'en passer de la sortie OUTPUT et du RETURN et faire dans la procedure :
    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
     
    CREATE PROCEDURE exist_client 
    (
    @nom char(15), 
    @prenom char(15) ,
    )
    AS
    DECLARE @exist INT
     
    SELECT @exist = (SELECT Num
                 	  FROM client
    		   WHERE Nom=@Nom
    		    AND Prénom=@prenom)
     
    IF @exist is NULL
    SET @exist = O 
     
    SELECT @Exist As Exist 
    end
    Et dans delphi faire un Open de la sp et recuperer par FieldByName :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SpExistClient .Open;
    Result:=SpExistClient .FieldByName('exist').Value;
    SpExistClient .Free;
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

Discussions similaires

  1. [Débutant] récupérer le résultat d'une procédure stockée
    Par HeleneaLuwina dans le forum VB.NET
    Réponses: 4
    Dernier message: 24/02/2012, 12h47
  2. Réponses: 4
    Dernier message: 17/07/2008, 14h18
  3. Comment récupérer le résultat d'une procédure stockée (OUT parameter) ?
    Par java2008 dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 08/04/2008, 14h00
  4. Récupérer le résultat d'une procédure stockée
    Par DanZzz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/11/2006, 23h08
  5. [C#] Récupérer le résultat d'une procédure stockée
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 14h45

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