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

WinDev Discussion :

Parcourir une source de données quand on ne connait pas les noms des rubriques [WD17]


Sujet :

WinDev

  1. #1
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut Parcourir une source de données quand on ne connait pas les noms des rubriques
    Bonjour,

    je programme un interpréteur sql intégré à mon appli, dont le but sera de pouvoir interroger, modifier, supprimer en cas de besoin, quand je ne pourrai pas accéder directement à la bd.

    Je peux donc saisir n'importe quelle requête sql, donc je ne connais pas à l'avance ce qui se retrouvera dans ma source de données.
    Ma question est simple : comment je peux parcourir un recordset sans connaitre les rubriques qui s'y trouvent, donc d'une manière indicée plutôt. Actuellement voilà ce sur j'ai écrit, mais je coince :

    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
    Sql est une chaîne = SAI_sql
    Rs est une Source de Données
     
    SI PAS HExécuteRequêteSQL(Rs,Cnx,hRequêteSansCorrection,Sql) ALORS
    	Erreur("Erreur d'initialisation de la requête"+RC+HErreurInfo()+ RC + RC + Sql)
    	RETOUR
    FIN
    SI HLitPremier(Rs) ALORS
     
    	TANTQUE PAS HEnDehors(Rs)
     
    		Trace(Rs.?)
     
                                    HLitSuivant(Rs)
    	FIN
     
    FIN
    J'en profite pour vous demander si on peut connaitre à partir de la source de données, les noms des rubriques, parce que je vais construire ma table résultat dynamiquement à partir du Rs.

    Merci à vous
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  2. #2
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour

    Avec HListeRubrique(Rs) tu auras la liste des colonnes de ta requête

    Il n'y pas plus qu'à utiliser les indirections pour lire leur contenu
    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SI HLitPremier(Rs) ALORS
    	sLstCol = HListeRubrique(Rs)
    	TANTQUE PAS HEnDehors(Rs)
    		POUR TOUTE CHAÎNE sCol DE sLstCol SEPAREE PAR RC
    			Trace({Rs..Nom+"."+sCol,indRubrique})
    		FIN
    		HLitSuivant(Rs)
    	FIN
    FIN

  3. #3
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    C'est vraiment exactement ce que je cherchais, merci

    Dernière chose, à chaque appel de ma fonction d'interprétation sql, j'aimerais que ma table soit à nouveau dans son état initial (celui défini dans l'ide) sans tous les champsclone que j'ai pu faire lors de la requête précédente.... comment je peux faire cela ? A la limite si je savais comment parcourir les colonnes de ma table, comme ça je supprime de 2 à n, et je garde ma colonne modèle...

    merci à tous
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  4. #4
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    faut vraiment que je prenne le temps de chercher avant de poser des questions moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TableSupprimeTout(TABLE_resultat)
     
    TANTQUE TABLE_resultat..NombreColonne > 1
     
    	ChampSupprime(TableEnumèreColonne(TABLE_resultat,2))
     
     
    FIN
    j'ai un peu galérer au début parce que je faisais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    POUR i = 2 A TABLE_resultat..NombreColonne
     
        ChampSupprime(TableEnumèreColonne(TABLE_resultat,i))
     
     
    FIN
    mais au fur et à mesure que je supprimais les colonnes, la propriété NombreColonne diminuait donc ça jouait pas !

    Retenir la première solution.
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  5. #5
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    bon là c'est pas faute d'avoir cherché, mais dans le cas d'une requête autre qu'un SELECT, je veux pouvoir au moins afficher le nombre d'enregistrement affectés par la requête (update, delete, insert, alter, etc...)

    j'ai testé HNbEnr mais ça ne fonctionne pas

    Voici comment j'exécute la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SI PAS HExécuteRequêteSQL(Rs,Cnx,hRequêteSansCorrection,Sql) ALORS
    	Erreur("Erreur d'initialisation de la requête"+RC+HErreurInfo()+ RC + RC + Sql)
    	RETOUR
    FIN
     
    TableAjoute(TABLE_resultat, HNbEnr(Rs) + " lignes affectée(s)")
    mais HNbEnr ne fonctionne que sur una table connue dans l'analyse, après un éventuel hfiltre....

    je voudrais un équivalent de Rs.recordcount


    EDIT : je crains qu'on ne puisse pas faire cela autrement qu'en parsant la requête pour la transformer en select et compter le nombre d'enregsitrements avant de faire réellement l'update ou alter ou delete... qui pourrait échouer d'ailleurs, donc pas satisfaisant...
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir,

    A partir de la 18, il y a H.NbEnregRequêteModification

    Hemgé

  7. #7
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    oui j'avais vu ça et dégouté que ça n'existe pas dans la 17

    sinon il y a le predicat @@rowcount en sql server, mais ça retourne 0 donc pas bon non plus
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    A tout hasard, une autre discussion à ce sujet.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 05/08/2009, 12h30
  2. Réponses: 6
    Dernier message: 20/12/2007, 15h04
  3. Réponses: 4
    Dernier message: 08/05/2006, 16h41
  4. Définir une source de données
    Par vdbadr dans le forum Access
    Réponses: 11
    Dernier message: 01/01/2006, 10h37
  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, 13h53

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