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

  1. #1
    Membre averti Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    mars 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2007
    Messages : 438
    Points : 332
    Points
    332

    Par défaut Source de données en retour de fonction

    Bonjour,

    juste avant que je passe mon portable par la fenêtre : on est bien d'accord, il n'est pas possible de renvoyer une source de données comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    rsClient est une source de données 
     
    sql = "SELECT * FROM Clients"
     
    Si pas HexecuteRequeteSQL(rsClient , hrequetedefauit, rs) alors 
     
    Renvoyer NULL
    sinon
    Renvoyer rsClient 
    Fin

    ceci pour récupérer mon recordset dans un code appelant ( comme c'était possible sous VB 6.0)

    Bonne journée

  2. #2
    Membre averti
    Homme Profil pro
    Admin - Gestion reconverti en informatique
    Inscrit en
    septembre 2017
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Admin - Gestion reconverti en informatique

    Informations forums :
    Inscription : septembre 2017
    Messages : 226
    Points : 307
    Points
    307

    Par défaut

    Bonjour,
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ReqClient est une Source de Données
    // Initialisation de la requête "Clients"
    SI PAS HExécuteRequêteSQL(ReqClient, "SELECT * FROM Clients") ALORS
        Erreur(HErreurInfo())
    FIN

  3. #3
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    janvier 2010
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2010
    Messages : 974
    Points : 1 922
    Points
    1 922

    Par défaut

    Hello,
    Tu pourrais faire ceci :

    Appel de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MaSourcededonnées est une Source de Données
    SI Pl_SDTest(MaSourcededonnées) ALORS
            POUR TOUT MaSourcededonnées 
                Trace(HRécupèreEnregistrement(MaSourcededonnées , TAB , RC))
            FIN
    FIN
    La fonction a appeler
    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
    PROCEDURE Pl_SDTest(sd_RecordSet est une Source de Données) :booléen
    sSQLTmp est une chaîne = [
    SELECT 
    [num_cuve]
    ,[pds_tare]
    ,[Volume]
    FROM [SuiviFab].[dbo].[CUVE]
    ]
    SI PAS HExécuteRequêteSQL(sd_RecordSet, gcnxBaseStats,hRequêteSansCorrection, sSQLTmp) ALORS
        Info("Erreur dans la requete", HErreurInfo(hErrComplet))
        RENVOYER Faux
    FIN
    //renvoyer article
    SI HLitPremier(sd_RecordSet , hSansRafraîchir)  ALORS 
        RENVOYER Vrai
    FIN
    RENVOYER Faux
    Mais il serait préférable de passer par une structure qui récupérerait alors le recordset, à mon sens...
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  4. #4
    Membre averti Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    mars 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2007
    Messages : 438
    Points : 332
    Points
    332

    Par défaut

    Passer le recordset .. heu ... la source de données en paramètre de la fonction ...

    J'ai testé , ça marche bien, merci beaucoup

    Par contre quelle serait l'avantage d'utiliser une structure, je ne comprends pas trop l'idée ?

    Olivier

  5. #5
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    janvier 2010
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2010
    Messages : 974
    Points : 1 922
    Points
    1 922

    Par défaut

    Hello,
    En fonction de tes besoins, du type calculs, affectation de valeurs, la structure te permet une souplesse que n'a pas l'exemple (c'est du brut).
    Mais toi seul peut nous dire et définir tes besoins. En partant du principe que de toute manière, ta mémoire est affectée par le recordset mais que les données
    ne sont pas facilement manipulables, une structure te permet :
    - utilisation de la fonction fichierversstructure
    - récupérer le nommage de tes zones du recordset avec affectation de type (chaine, booleen, date,...)
    - Réaliser des calculs ou des opérations diverses
    - Vider la structure si son utilité n'est plus (libération de la mémoire)
    - Rapidité d'accès aux données lues
    Voilà très succinctement les différentes possibilités mais il y en a d'autres.
    Bon Dev
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  6. #6
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    mars 2002
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2002
    Messages : 1 099
    Points : 2 406
    Points
    2 406

    Par défaut

    Une fonction peux renvoyer une source de données, il faut "biaiser" pour cela.

    Sachant qu'une source de données n'est qu'un identifiant sous forme d'une "chaîne de caractère" qui la caractérise et qu'elle est est globale au contexte HF en cours.

    Le DonneGuid() permet de créer une source de données avec un nom unique, sans cela si tu appelles deux fois ta fonction dans la même portée, le 2ième appel écraserait les données de la première source de données.


    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
    PROCEDURE LoadData()src est une chaîne = DonneGUID(guidBrut)
     
    sSQLTmp est une chaîne = [
        SELECT 
        *
        FROM Test
    ]
     
    SI PAS HExécuteRequêteSQL(src, hAvecTransaction, sSQLTmp) ALORS
        Info("Erreur dans la requete", HErreurInfo(hErrComplet))
        RENVOYER ""
    FIN
     
     
    RENVOYER src
     
     
    PROCEDURE Test()
    src1 est une Source de Données = LoadData()
    SI src1 <> "" ALORS
        POUR TOUT src1 
            Trace(src1.Nom)
        FIN
     
        HLibère(src1)
    FIN
    HLibère(src1)
    Il faut malheureusement souvent "biaiser" avec windev ...
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  7. #7
    Membre averti Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    mars 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2007
    Messages : 438
    Points : 332
    Points
    332

    Par défaut

    Bon, j'ai pas fini de découvrir des nouveautés avec WD ( quoique qu'avec 998 nouveautés /an ...c'est normal )

    Je vais gratter de ce côté ( et jeter un oeil aux structures )

    Merci pour les infos !

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/08/2016, 20h35
  2. utilisation d'une fonction dans la source de donnée
    Par genamiga dans le forum Jasper
    Réponses: 4
    Dernier message: 25/11/2010, 18h47
  3. Recuperer la valeur de retour de Sources de données (ODBC)
    Par zaynabe dans le forum Général Java
    Réponses: 3
    Dernier message: 03/12/2008, 18h56
  4. [JDBC] Retour de fonction de base de données ?
    Par celine31 dans le forum JDBC
    Réponses: 4
    Dernier message: 09/01/2006, 11h29
  5. [Crystal Report 8] créer une source de données oracle
    Par Lina dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 14/11/2002, 14h53

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