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

 Delphi Discussion :

fonction avec en retour un tableau


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 68
    Points
    68
    Par défaut fonction avec en retour un tableau
    Bonjour à tous
    Meilleurs Voeux.

    Comment realiser une fonction de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    function Test: [0..20] of String; 
    begin
      Result[0]:= 'Test 1';
      Result[1]:= 'Test 2';
    end;



    Merci de votre Aide.

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    oh que oui, ta fonction aura cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function chaine(var t : array of string) : string;
    begin
      // traitement
    end;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 68
    Points
    68
    Par défaut
    Bonjour Just-Soft,

    merci pour ta réponse.


    Je fait un essai pour récuperer la fonction



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    function TForm1.chaine(var t : Array  of String) :String ;
    begin
      t[0]:= ' Essai 1';
      t[1]:= ' Essai 2;
      t[2]:= ' Essai 3;
    end;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
      ShowMessage(Chaine[0]);  // Erreur
      ShowMessage(Chaine[1]);  // Erreur

    Comment faire pour récupérer le tableau de la fonction

    Merci

  4. #4
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    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
     
        montab:array[1..2]of string;
        function tab(T:array of string;indice:integer): string;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
        function TForm1.tab(T:array of string;indice:integer): string;
        var maxT:integer;
        begin
        T[1]:='essai1';
        T[2]:='essai2';
        ......si T>2
        case indice of
        1:result:=T[1];
        2:result:=T[2];
    //etc si T>2
        end;
     
        end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    caption:=tab(montab,2);
    end;
    Je ne vois pas trop l'intérêt de la chose...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 68
    Points
    68
    Par défaut
    Bonjour Archimède,

    merci pour ta réponse.

    Je crois que je me suis mal exprimer.


    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    function TDM.RecupProc (s:String) :Array [0..2] of String;
    const
       cstSQL =   ' SELECT'
                     +'  COD_DON' 
                     +' FROM'
                     +'   %S';
    begin
       Result[0]:= 'Annuler';
        with TjvUIBQuery.Create(Nil) do
        begin
          try
            Transaction:= TjvUIBTransaction.Create(Nil);
            Transaction.DataBase:= jvBase;
            try
              SQL.Text:= Format(cstSQL,[S]);
              Open;
              if not eof then 
              begin  
                 Result[1]:= 'Ok';  // pas erreur donc tableau index 0 = ok  
                 Result[0]:= Fields.ByNameAsString['COD_DON'];   // retour cod           
              end;
              Close(etmCommit);
            Except
               Transaction.RollBack;
               Result[0]:= 'Annuler'; // Erreur donc tableau index 0 = Annuler
            end;  // except
     
          finally
            Transaction.Free;
            Free;
          end;   // finally
        end;  // with
    end;
     
     
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    var 
      T : Array [0..1] of String;
    begin
      T:= if DM.RecupProc('DON');
     
      if T[0] = 'TRUE' then
        ShowMessage( T[1])  // tout est ok donc mon cod_don
      else
        ShowMessage('Erreur ');
    end;
    avoir une fonction qui retour un tableau voila

    merci

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 807
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 807
    Points : 13 503
    Points
    13 503
    Par défaut
    Beaucoup d'ilogisme dans tout cela!

    Ce que propose Just-Soft est correct! Bien sûr la première chose à faire dans le traitement est de fixer la taille du tableau par un SetLength. Par contre, le Result sous forme de string n'a aucune raison d'être.

    La gestion du résultat est elle catastrophique!
    Result[0] := 'Annuler'
    Result[1] := 'Ok'
    T[0] = 'TRUE'


    Voici juste un exemple pour récupérer un tableau de taille fixe, mais l'ensemble n'est pas bien clair:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Type
      TRecup = array[0..1] of string;
     
    function TDM.RecupProc (s:String) :TRecup;

  7. #7
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    repense ton problème peut-être que tu cherche autre chose mais si seulement on savait le but de tout cela

    cordialement.

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Ce que tu souhaites faire, si j'ai bien compris, est de lire une valeur dans une table de ta BDD, et le cas échéant préciser que la lecture a échoué.

    Je ne pense pas qu'il soit nécessaire de renvoyer un tableau dans ce cas précis.
    Je verrais plus une fonction qui renvoie un booléen (Ok, Pas Ok) et un paramètre de sortie. Comme ceci 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function TDM.RecupProc(ATableName: string; out ARetValue: string): Boolean;
    const
       cstSQL = 'SELECT COD_DON FROM %s';
    begin
      Result := False;
     
      with TJvUIBQuery.Create(nil) do
      begin
        Transaction := TjvUIBTransaction.Create(nil);
        Transaction.Options := [tpConsistency, tpRead]; // ITL
        Transaction.DataBase := jvBase;
        try
          SQL.Text := Format(cstSQL, [ATableName]);
          try
            Open;
            if not Eof then
            begin
              Result := True;
              ARetValue := Fields.AsString[0]; // Valeur de sortie 
            end;
            Close(etmCommit);
          except
            on E: EUIBError do
              ARetValue := E.Message; // Valeur de sortie contenant le message d'erreur
          end;
        finally
          Free;
          Transaction.Free;
        end;
      end;
    end;

    Maintenant au niveau de l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.Button1Click(Sender: TObject);
    var
      DataCode: string;
    begin
      if RecupProc('DON', DataCode) then
        ShowMessage(DataCode)
      else
        ShowMessage(Format('Erreur: %s', [DataCode]));
    end;
    Voilà pour le principe.

    Une remarque cependant sur la requête: Est-ce réellement celle exécutée ? Car actuellement tu renvoie toujours la valeur du 1° enregistrement de la table sélectionnée. Est-ce voulu ?

    @+ Claudius

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 68
    Points
    68
    Par défaut
    Merci à toi Cl@udius si ce que je chercher


    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 6
    Dernier message: 31/03/2008, 09h27
  3. Réponses: 11
    Dernier message: 25/03/2008, 23h12
  4. Fonction avec un tableau en retour
    Par viny dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 28/09/2006, 22h00
  5. [XSLT] fonction avec retour
    Par goth dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/02/2006, 23h49

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