|
| Type de données (rubrique) champ de requête |
| Iniciado por dj5f, 04,jun. 2020 01:57 - 6 respuestas |
| |
| | | |
|
| |
Miembro registrado 163 mensajes |
|
| Publicado el 04,junio 2020 - 01:57 |
J'aimerais pouvoir déterminer par programmation le type de données pour les rubriques d'une requête après exécution (date, entier, chaîne, ...).
Voici une partie de mon code :
Le code fonctionne très bien pour ajouter le résultat de la requête à une table, mais je ne peux pas formater les colonnes, ne sachant pas à les types de données des requêtes. J'utilise une fenêtre pour afficher les données de fichiers divers. Ce sont souvent des requêtes.
sListeRubriques est une chaîne = HListeRubrique("Req") ListeAjoute(LISTE_rubriques,sListeRubriques) nRubriques est un entier = ListeOccurrence(LISTE_rubriques) nColonnes est un entier = TableOccurrence(TABLE_Fichier,toColonne)
i est un entier = 1
sNomColonne est une chaîne sNomChamp est une chaîne
POUR TOUTE chaîne sRubrique de sListeRubriques SEPAREE PAR RC SI i > nColonnes ALORS sNomChamp = "COL_" + i ChampClone(TableEnumèreColonne(TABLE_Fichier,i-1),sNomChamp) FIN sNomColonne = TableEnumèreColonne(TABLE_Fichier,i) {sNomColonne,indChamp}..Libellé = sRubrique {sNomColonne,indChamp}..LiaisonFichier = sRubrique i++ FIN
-- __________________ Denis Jobin Longueuil, Québec |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 04,junio 2020 - 06:31 |
Bonjour, Avec ChampClone, tu ne peux pas modifier le type de colonne, il faut utiliser ChampCrée
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 134 mensajes |
|
| Publicado el 04,junio 2020 - 09:10 |
Bonjour,
Ci-dessous un exemple de code simplifié :
Soit resultat la source de données résultat de la requête Soit TABLE_resultat une table en mode de remplissage Fichier /requête contenant uniquement une colonne COL_Ancrage en invisible
lproc_initialiser( resultat est une Source dede Données )
i, iMax est un entier Rubrique est une chaîne rubriques est un tableau de 0 chaîne c est un Champ
TABLE_resultat..AffichageActif = Faux TABLE_resultat..FichierParcouru = "" iMax = TableOccurrence( TABLE_resultat, toColonne ) POUR i = iMax À 1 PAS -1 c <- TableEnumèreColonne( TABLE_resultat, i ) SI c..Nom <> COL_Ancrage..Nom ET ChampExiste( c..Nom ) ALORS ChampSupprime( c..Nom ) FIN HLitPremier( resultat ) SI PAS HEnDehors( resultat ) ALORS ChaîneVersTableau( HListeRubrique( resultat ), rubriques, RC ) POUR TOUTE Rubrique de Rubriques Rubrique = SansEspace( Rubrique ) SELON { resultat + "." + Rubrique, indRubrique }..Type CAS hRubMémoBinaire : c <- ChampCrée( TABLE_resultat..Nom + ".COL_" + Rubrique, typImage ) c..ImageMode = imgHC + imgHQ AUTRE CAS : c <- ChampCrée( TABLE_resultat..Nom + ".COL_" + Rubrique, typColonne ) FIN SELON { resultat + "." + Rubrique, indRubrique }..Type CAS hRubIdAuto, hRubIdAuto4 : c..TypeSaisie = typSaisieNum c..CadrageHorizontal = chDroite CAS hRubDate6, hRubDate8 : c..TypeSaisie = typSaisieDate c..CadrageHorizontal = chDroite CAS hRubDateHeure : c..TypeSaisie = typSaisieDate c..MasqueSaisie = "JJ/MM/AAAA HH:mm:SS" c..FormatMémorisé = "AAAAMMJJHHmmSS" c..CadrageHorizontal = chDroite CAS hRubHeure : c..TypeSaisie = typSaisieHeure c..CadrageHorizontal = chDroite CAS hRubEntier1, hRubEntier2, hRubEntier4, hRubEntier8, hRubEntierNonSigné1, hRubEntierNonSigné2, hRubEntierNonSigné4, hRubEntierNonSigné8, hRubNumérique, hRubRéel4, hRubRéel8, hRubRéelTurbo : c..TypeSaisie = typSaisieNum c..CadrageHorizontal = chDroite CAS hRubMonétaire : c..TypeSaisie = typSaisieMonétaire c..MasqueSaisie = "MoneySystemMask$" c..CadrageHorizontal = chDroite CAS hRubBooléen : c..CadrageHorizontal = chDroite CAS hRubMémoBinaire : AUTRE CAS : c..TypeSaisie = typSaisieTexte c..CadrageHorizontal = chGauche FIN c..Libellé = { resultat + "." + Rubrique, indRubrique }..Libellé c..LiaisonFichier = resultat + "." + Rubrique c..Visible = Vrai FIN TABLE_resultat..FichierParcouru = resultat TableAffiche( TABLE_resultat, taInit ) TableAjuste( TABLE_resultat ) FIN TABLE_resultat..AffichageActif = Vrai |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 163 mensajes |
|
| Publicado el 04,junio 2020 - 15:17 |
Julien,
Merci pour le code. C'est beaucoup plus complet que le mien.
Par contre, il y a toujours de petits problèmes. Notes : 1- les données proviennent d'une requête (celle-ci n'est pas incluse dans le projet (éditeur de requête) mais directement dans le code). 2- les données sont lues d'une base MySql
Voici les deux problèmes que je constate : 1- J'ai un champ dateheure - celui-ci est considéré comme texte, donc non détecté 2- Le libellé n'est pas lu - les colonnes n'ont pas de nom.
-- __________________ Denis Jobin Longueuil, Québec |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 134 mensajes |
|
| Publicado el 04,junio 2020 - 15:34 |
Pour le nom des colonnes il est peut être possible d'extraire les alias de rubriques de la requête s'ils existent, sinon mettre le libellé s'il est rempli sinon directement la rubrique.
Ex.
i, iMax est un entier rubriques, valeurs est un tableau de 0 chaîne alias est un tableau associatif de chaîne
SI ChaîneOccurrence( sql, "SELECT" ) ALORS ChaîneVersTableau( SansEspace( Remplace( ExtraitChaîne( sql, 2, [ "SELECT", "FROM" ] ), RC, "" ) ), valeurs, "," ) FIN
iMax = TableauOccurrence( valeurs )
POUR i = 1 À iMax SI ChaîneOccurrence( valeurs[ i ], "AS", MotComplet ) > 0 ALORS alias[ i ] = SansEspace( ExtraitChaîne( valeurs[ i ], 2, "AS" ) ) FIN FIN
[...
iMax = TableauOccurrence( rubriques ) POUR i = 1 À iMax SI alias[ i ]..Existe ALORS c..Libellé = alias[ i ] SINON SI { resultat + "." + Rubrique, indRubrique }..Libellé <> "" ALORS c..Libellé = { resultat + "." + Rubrique, indRubrique }..Libellé SINON c..Libellé = Rubrique FIN
FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 134 mensajes |
|
| Publicado el 04,junio 2020 - 15:42 |
Pour la date, si le type de la rubrique est texte au niveau de la source de données qui contient le résultat, peut être tester si le contenu de la rubrique du premier enregistrement vérifie la fonction DateValide
(Je n'ai pas testé ce code)
AUTRE CAS : SI DateValide( { resultat + "." + Rubrique, indRubrique } ) ALORS SINON c..TypeSaisie = typSaisieTexte c..CadrageHorizontal = chGauche FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 163 mensajes |
|
| Publicado el 04,junio 2020 - 16:32 |
Julien,
Fantastique !!!!
Ça fonctionne très bien. Et pour le nom des colonnes et pour les dates.
Merci !!!
-- __________________ Denis Jobin Longueuil, Québec |
| |
| |
| | | |
|
| | | | |
| | |
|