PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Différence fonctionnement SQLColonne entre windev 25 et windev 2025
Différence fonctionnement SQLColonne entre windev 25 et windev 2025
Débuté par Baptiste, 08 avr. 2025 16:10 - 5 réponses
Posté le 08 avril 2025 - 16:10
Bonjour

On vient de se rendre compte d'un probleme. On a migé un projet en windev 25 en windev 2025

J'utilise MySQL et le connecteur natif mysql de windev

En windev 25 j'utilisais le code suivant pour mettre a jour la taille d'un champ dans ma base de données

//Mise à jour de la taille du champ

IF PAS SQLExec("SELECT MABASE FROM MONCHAMP limit 1","REQ1") THEN
// Le champ est deja a jour
ELSE
// Mise à jour de la taille du champ
sResult=SQLColonne("REQ1",True)
IF ExtraitChaîne(sResult,4,TAB)="300" THEN
Affichage_FEN_MAJTABLE
SQLExec("ALTER TABLE MABASE MODIFY MONCHAMP VARCHAR(160)","req1")
END
END

En windev 2025 la la chaine retournée est :
sResult=MONCHAMP T 0 100

En windev 25 c'est
sResult=MONCHAMP T 0 300

On a une différence de fonctionnement pour une meme fonction. Du coup la mise à jour de mes tables ne se fait plus. Existe t'il une solution fiable pour tester la taille d'un champ dans une base MySQL.
Merci
Membre enregistré
235 messages
Posté le 08 avril 2025 - 17:58
Bonjour,

Je n'utilise plus SQLColonne car j'ai également remarqué des différences de fonctionnement entre les versions de Windev

Du coup, j'ai remplacé cette fonction par une requête native de MySQL : SHOW COLUMNS FROM MATABLE
Il suffit de récupérer et d'analyser la valeur des colonnes "Field", "Type", "Null" et "Key"

Désormais, ça fonctionne quelque soit la version de Windev

Cdt
Posté le 09 avril 2025 - 16:22
Merci, je vais passer par la requête

C'est effectivement assez dangereux cette différence de fonctionnement, surtout que ce n'est pas documenté dans la doc de pcsoft

Fabrice N a écrit :
Bonjour,

Je n'utilise plus SQLColonne car j'ai également remarqué des différences de fonctionnement entre les versions de Windev

Du coup, j'ai remplacé cette fonction par une requête native de MySQL : SHOW COLUMNS FROM MATABLE
Il suffit de récupérer et d'analyser la valeur des colonnes "Field", "Type", "Null" et "Key"

Désormais, ça fonctionne quelque soit la version de Windev

Cdt
Posté le 10 avril 2025 - 09:50
Je n'arrive pas a mettre ce processus en place

Avez-vous un exemple SVP ?

Fabrice N a écrit :
Bonjour,

Je n'utilise plus SQLColonne car j'ai également remarqué des différences de fonctionnement entre les versions de Windev

Du coup, j'ai remplacé cette fonction par une requête native de MySQL : SHOW COLUMNS FROM MATABLE
Il suffit de récupérer et d'analyser la valeur des colonnes "Field", "Type", "Null" et "Key"

Désormais, ça fonctionne quelque soit la version de Windev

Cdt
Posté le 10 avril 2025 - 10:18
A merci, j'ai trouvé

SQLExec("SHOW COLUMNS FROM MaBase", "REQ1")
TANTQUE SQLAvance("REQ1") = 0 // Il y a encore une ligne à lire
// Récupérer les données
Info(SQLLitCol("REQ1", 1)) // Field
Info(SQLLitCol("REQ1", 2)) // Type
FIN
SQLFerme("REQ1")

Fabrice N a écrit :
Bonjour,

Je n'utilise plus SQLColonne car j'ai également remarqué des différences de fonctionnement entre les versions de Windev

Du coup, j'ai remplacé cette fonction par une requête native de MySQL : SHOW COLUMNS FROM MATABLE
Il suffit de récupérer et d'analyser la valeur des colonnes "Field", "Type", "Null" et "Key"

Désormais, ça fonctionne quelque soit la version de Windev

Cdt
Membre enregistré
235 messages
Posté le 10 avril 2025 - 11:07
Bonjour,

J'ai créé une fonction "perso" pour remplacer SQLColonne :

FONCTION MySqlColumns(sTable est une chaîne) : chaîne
// Renvoi la liste des colonnes (ou rubriques) d'une table
dColumns est une Source dede Données
sColumns est une chaîne=""

SI HExécuteRequêteSQL(dColumns, cnxMySQL, hRequêteSansCorrection, "SHOW COLUMNS FROM "+sTable) ALORS
HLitPremier(dColumns,hSansRafraîchir)
TANTQUE PAS HEnDehors(dColumns)
sColumns+=[RC]+dColumns.Field+TAB
SELON dColumns.Type
CAS [="bigint": sColumns+="N"+TAB+"3"+TAB
CAS "mediumblob": sColumns+="N"+TAB+"4"+TAB
CAS [="varbinary": sColumns+="N"+TAB+"5"+TAB
CAS [="binary": sColumns+="N"+TAB+"6"+TAB
CAS [="text",[="mediumtext","": sColumns+="T"+TAB+"7"+TAB
CAS [="char": sColumns+="T"+TAB+"9"+TAB
CAS [="decimal": sColumns+="N"+TAB+"11"+TAB
CAS [="int",[="mediumint": sColumns+="N"+TAB+"12"+TAB
CAS "smallint": sColumns+="N"+TAB+"13"+TAB
CAS "date": sColumns+="T"+TAB+"17"+TAB
CAS "time": sColumns+="T"+TAB+"18"+TAB
CAS "datetime","timestamp": sColumns+="T"+TAB+"19"+TAB
CAS [="varchar": sColumns+="T"+TAB+"20"+TAB
AUTRE CAS: sColumns+="?"+TAB+TAB
FIN
SELON dColumns.Key
CAS "PRI": sColumns+="PRIMAIRE"
CAS "UNI": sColumns+="UNIQUE"
CAS "MUL": sColumns+="MULTIPLE"
FIN
HLitSuivant(dColumns)
FIN
HAnnuleDéclaration(dColumns)
FIN
RENVOYER sColumns


A toi de l'adapter en fonction des types de colonnes que tu utilises dans tes tables MySQL car la liste n'est pas compète (elle correspond juste à mes besoins)

PS: J'utilise l'accès natif MySQL

Cdt
Message modifié, 10 avril 2025 - 11:12