Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD12] SQLManagerX et MySQL

22 réponses
Avatar
JeAn-PhI
bonjour

je suis en cours de dev avec SQLManagerX et je ne trouve pas comment
mettre les valeurs par défaut définit dans la bdd en l'occurrence NULL

j'ai essayé le mot "DEFAULT" mais cela ne fonctionne pas

comment puis je faire ?

merci

--
Cordialement JeAn-PhI

10 réponses

1 2 3
Avatar
Firetox
Bonjour,

dans le SQLinsert de SQLManagerX
vous devez avoir a la ligne 64 :

SI ((:ValCol[i] <> :defCol[i]) ET :extCol[i] <> "auto_increment") ALORS //OU
p_prepare ALORS

si vous avez cette ligne enlever le commentaire a la fin pour avoir le
prepare
en fait pour un prepare il faut envoyer toutes les colonnes maintenant il
faudra se poser la question du null
mais faites cet essai apres on avisera et on versionnera une nouvelle
version de la classe

donc vous devriez avoir en ligne 64 :
SI ((:ValCol[i] <> :defCol[i]) ET :extCol[i] <> "auto_increment") OU
p_prepare ALORS

j'avais deja vu cela mais pourqoui etre revenu en arriere la je dois
rechercher dans les documents de mises a jour pourqoui je l'ai enlever
je pense pour un prepare particulier, mais normalement c'est le bon code
comme ca toutes les ligne du prepare auront la meme syntaxe et les meme
colonnes

bon dev
@+

(si vous n'avez pas cette ligne comme cela : donnez moi la version que vous
utilisez)




"JeAn-PhI" a écrit dans le message de news:
48c67cdf$0$890$
Firetox a présenté l'énoncé suivant :
j'ai bien compris
il y a surement un bug sur le prepare si toutes les lignes n'ont pas la
meme defintion (avec les null on aura des valeur differentes sur le
prepare
donc je vais reflechir sur le prepare (du moin su l'insert car le
preparre fait des inser tcumulé

ai je un peu de temps pour ca ?
disons 1 a 2 jours pour voir comment modifier l'insert sur un prepare qui
genereait des value differentes des noms de colonnes
ce qui se passe pour toi

Bon dev
@+

Firetox




merci

--
Cordialement JeAn-PhI




Avatar
JeAn-PhI
Firetox a utilisé son clavier pour écrire :
Bonjour,

dans le SQLinsert de SQLManagerX
vous devez avoir a la ligne 64 :

SI ((:ValCol[i] <> :defCol[i]) ET :extCol[i] <> "auto_increment") ALORS //OU
p_prepare ALORS

si vous avez cette ligne enlever le commentaire a la fin pour avoir le
prepare
en fait pour un prepare il faut envoyer toutes les colonnes maintenant il
faudra se poser la question du null
mais faites cet essai apres on avisera et on versionnera une nouvelle version
de la classe

donc vous devriez avoir en ligne 64 :
SI ((:ValCol[i] <> :defCol[i]) ET :extCol[i] <> "auto_increment") OU
p_prepare ALORS

j'avais deja vu cela mais pourqoui etre revenu en arriere la je dois
rechercher dans les documents de mises a jour pourqoui je l'ai enlever
je pense pour un prepare particulier, mais normalement c'est le bon code
comme ca toutes les ligne du prepare auront la meme syntaxe et les meme
colonnes

bon dev
@+

(si vous n'avez pas cette ligne comme cela : donnez moi la version que vous
utilisez)





ok cela fonctionne correctement mais effectivement les colonnes sans
valeur (chaine vide) ne prennent pas la valeur par défaut définit au
niveau de la bdd à savoir NULL donc je gagne d'un côté en rapidité mais
je "perds" en infos d'un autre côté (chaine vide au lieu de NULL)

il est vrai que si cette infos a été mise en commentaire c'est qu'il
doit y avoir un raison certaine

merci pour tout en attendant la suite

--
Cordialement JeAn-PhI
Avatar
Jacques TREPP
"Firetox" a écrit dans le message de
news:48c6bee5$0$1436$
Bonjour,

dans le SQLinsert de SQLManagerX
vous devez avoir a la ligne 64 :

SI ((:ValCol[i] <> :defCol[i]) ET :extCol[i] <> "auto_increment") ALORS
//OU p_prepare ALORS





Bonjour Frédéric,

je te confirme que, déjà dans la VERSION 3.1.0.3 du 18 mars 2005, le
p_prepare est actif.

cordialement

--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)
Avatar
Firetox
Bonjour,

on peut faire quelque chose dans le cas de prepare, pour mettre null a la
place de '' dans les chaine
le cas est traité pour les numeric et date (on envoi null si le champs est
vide) par contre pour les chaines comme je l'ai dit hier '' est une valeur
alors que null vuet dire absence de valeur
on va faire un test je vous donnerais une ligne de code a rajouter qui
permetra de mettre null si vous mettez par exemple @null dans le champs
comme valeur

la valeur par defaut est bien gerer mais dans le cas de null windev recupere
'' et donc pour eviter cela le SQLInsert n'envoi pas la valeur le serveur se
chargeant de mettre la bonne valeur dans la colonne. mias cela fonctionne
que si l'insert est seul car a ce moment la les colonnes ne sont pas
remplies et les insert peuvent etre differents comme vous l'avez vu

bon je reviens avec le code

@+


"JeAn-PhI" a écrit dans le message de news:
48c7759f$0$26060$
Firetox a utilisé son clavier pour écrire :
Bonjour,

dans le SQLinsert de SQLManagerX
vous devez avoir a la ligne 64 :

SI ((:ValCol[i] <> :defCol[i]) ET :extCol[i] <> "auto_increment") ALORS
//OU p_prepare ALORS

si vous avez cette ligne enlever le commentaire a la fin pour avoir le
prepare
en fait pour un prepare il faut envoyer toutes les colonnes maintenant il
faudra se poser la question du null
mais faites cet essai apres on avisera et on versionnera une nouvelle
version de la classe

donc vous devriez avoir en ligne 64 :
SI ((:ValCol[i] <> :defCol[i]) ET :extCol[i] <> "auto_increment") OU
p_prepare ALORS

j'avais deja vu cela mais pourqoui etre revenu en arriere la je dois
rechercher dans les documents de mises a jour pourqoui je l'ai enlever
je pense pour un prepare particulier, mais normalement c'est le bon code
comme ca toutes les ligne du prepare auront la meme syntaxe et les meme
colonnes

bon dev
@+

(si vous n'avez pas cette ligne comme cela : donnez moi la version que
vous utilisez)





ok cela fonctionne correctement mais effectivement les colonnes sans
valeur (chaine vide) ne prennent pas la valeur par défaut définit au
niveau de la bdd à savoir NULL donc je gagne d'un côté en rapidité mais je
"perds" en infos d'un autre côté (chaine vide au lieu de NULL)

il est vrai que si cette infos a été mise en commentaire c'est qu'il doit
y avoir un raison certaine

merci pour tout en attendant la suite

--
Cordialement JeAn-PhI




Avatar
Firetox
Bonjour,

voila il faut rajouter ce code a la ligne 68
remplacer le code

lignevalue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","

par

SI :ValCol[i] = "@NULL" ALORS
lignevalue += "null,"
SINON
lignevalue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","
FIN

comme ca si vous voulez null dans une chaine remplissez le membre par @NULL
pour le reste pas de changement les numeric et date sont normalement traité
correctement
et vous pouvez laisser le code d'hier cette modif ne concerne que prepare
donc comme mes prepares fonctionnent je ne vois pas le probleme de le
laisser
d'apres mes doc de mise ajour, ce code etait un test qui anticipait en fait
votre probleme, car sur mon doc il y a d'ecrit : attention au insert groupé
qui n'ont pas le meme nombre de colonne (donc je pense que j'avais cherché
deja une solution (en 2005 !!! : que le temps passe vite) mais cela avait
pour certaine base qui ont beaucoup de colonne l'effet de ralentir un peu le
traitement et sur les doc les test sur 500 000 million d'enreg en insert
prenait 3 minutes de plus voila pourqoui il avait ete mis en commentaire
(du moins si j'ai bien ecrit a l'epoque)

essayez ce code et je versionnerais si tout fonctionne

@+


"Jacques TREPP" a écrit dans le message de news:
48c775df$0$7064$
"Firetox" a écrit dans le message de
news:48c6bee5$0$1436$
Bonjour,

dans le SQLinsert de SQLManagerX
vous devez avoir a la ligne 64 :

SI ((:ValCol[i] <> :defCol[i]) ET :extCol[i] <> "auto_increment") ALORS
//OU p_prepare ALORS





Bonjour Frédéric,

je te confirme que, déjà dans la VERSION 3.1.0.3 du 18 mars 2005, le
p_prepare est actif.

cordialement

--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)


Avatar
Jacques TREPP
Fred,

je suis ton fil.
j'ai intégré sous commentaires la modif que tu préconises.
Pour le moment, c'est inactif et ça ressemble à ça :

SELON :TypCol[i]
CAS "LONG", "TEXT", "CHAR", "TIME", "BLOB", "BYTEA", "RAW" :
ligneValue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","
// modif du 10/09/2008 pour remplacer une chaine vide par Null
// il suffit d'alimenter les colonnes vides avec "@NULL"
// SI :ValCol[i] = "@NULL" ALORS
// lignevalue += "null,"
// SINON
// lignevalue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","
// FIN

je l'active si j'ai ton accord.

A+

--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)
Avatar
Firetox
Salut jacques

ou c'est cette modif que j'ai fait dans SQLInsert
j'en ai fait une autre dans SQLupdate pour remettre une colonne a null
(chaine et date ) car les numeriques etaient pris en compte
j'ai fait quelques tests ca fonctionne pour l'instant je continue les test
(je viens de faire les modif dans la version windev 12 vais lancer les
applications qui utilisent cette classe

tu peux faire la modif je te donnerais aussi la modif update

Bon dev
@+

si tu vois des soucis n'hesites pas



"Jacques TREPP" a écrit dans le message de news:
48c77f6d$0$18211$
Fred,

je suis ton fil.
j'ai intégré sous commentaires la modif que tu préconises.
Pour le moment, c'est inactif et ça ressemble à ça :

SELON :TypCol[i]
CAS "LONG", "TEXT", "CHAR", "TIME", "BLOB", "BYTEA", "RAW" :
ligneValue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","
// modif du 10/09/2008 pour remplacer une chaine vide par Null
// il suffit d'alimenter les colonnes vides avec "@NULL"
// SI :ValCol[i] = "@NULL" ALORS
// lignevalue += "null,"
// SINON
// lignevalue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","
// FIN

je l'active si j'ai ton accord.

A+

--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)


Avatar
Firetox
il faut egalement modifier dans le SQLinsert la partie date :

CAS "DATE", "TIMESTAMP" :
ligneCol +=:DcaractEspace+ :NomCol[i] +:FCaracterEspace + ","

// modif du 10/09/2008 pour remplacer une chaine vide par Null
// il suffit d'alimenter les colonnes vides avec "@NULL"
SI :ValCol[i] = "@NULL" ALORS
ligneValue += "null,"
SINON
ligneValue += :MySQL:mySQLDateFormat(:ValCol[i]) + ","
FIN

en faisant les modifi pour update et insert et les test sur les dates il
faut cette partie egalement

faites les modifciations si vous voulez ou attendez dans la journée la
version sur le site
je fini les tests pour valider la modification




"Jacques TREPP" a écrit dans le message de news:
48c77f6d$0$18211$
Fred,

je suis ton fil.
j'ai intégré sous commentaires la modif que tu préconises.
Pour le moment, c'est inactif et ça ressemble à ça :

SELON :TypCol[i]
CAS "LONG", "TEXT", "CHAR", "TIME", "BLOB", "BYTEA", "RAW" :
ligneValue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","
// modif du 10/09/2008 pour remplacer une chaine vide par Null
// il suffit d'alimenter les colonnes vides avec "@NULL"
// SI :ValCol[i] = "@NULL" ALORS
// lignevalue += "null,"
// SINON
// lignevalue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","
// FIN

je l'active si j'ai ton accord.

A+

--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)


Avatar
JeAn-PhI
Dans son message précédent, Firetox a écrit :
Bonjour,

voila il faut rajouter ce code a la ligne 68
remplacer le code

lignevalue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","

par

SI :ValCol[i] = "@NULL" ALORS
lignevalue += "null,"
SINON
lignevalue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","
FIN

comme ca si vous voulez null dans une chaine remplissez le membre par @NULL
pour le reste pas de changement les numeric et date sont normalement traité
correctement
et vous pouvez laisser le code d'hier cette modif ne concerne que prepare
donc comme mes prepares fonctionnent je ne vois pas le probleme de le laisser
d'apres mes doc de mise ajour, ce code etait un test qui anticipait en fait
votre probleme, car sur mon doc il y a d'ecrit : attention au insert groupé
qui n'ont pas le meme nombre de colonne (donc je pense que j'avais cherché
deja une solution (en 2005 !!! : que le temps passe vite) mais cela avait
pour certaine base qui ont beaucoup de colonne l'effet de ralentir un peu le
traitement et sur les doc les test sur 500 000 million d'enreg en insert
prenait 3 minutes de plus voila pourqoui il avait ete mis en commentaire (du
moins si j'ai bien ecrit a l'epoque)

essayez ce code et je versionnerais si tout fonctionne

@+


"Jacques TREPP" a écrit dans le message de news:
48c775df$0$7064$
"Firetox" a écrit dans le message de
news:48c6bee5$0$1436$
Bonjour,

dans le SQLinsert de SQLManagerX
vous devez avoir a la ligne 64 :

SI ((:ValCol[i] <> :defCol[i]) ET :extCol[i] <> "auto_increment") ALORS
//OU p_prepare ALORS





Bonjour Frédéric,

je te confirme que, déjà dans la VERSION 3.1.0.3 du 18 mars 2005, le
p_prepare est actif.

cordialement

-- Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)





ok je fais la modif et je modifie mon code en conséquence pour avoir
que des SQLPrepare()

merci

--
Cordialement JeAn-PhI
Avatar
Firetox
Bonjour

ok je fais la modif et je modifie mon code en conséquence pour avoir que
des SQLPrepare()



ce n'est pas utile j'ai fait le test avec das insert normaux et cela
fonctionne tres bien si on met @NULL ca met null dans la base
sous windev on voit que le champs est '' mais dans la base on a bien NULL
le prepare le prend bien mais le SQLinsert aussi (puisque prepare demande
SQLinsert sans envoyer la requete, et renvoi la chaine qu'il aurait du
envoyer)

ca marche meme avec SQLEcranVersTable

Bon dev
@+


"JeAn-PhI" a écrit dans le message de news:
48c7a5c4$0$945$
Dans son message précédent, Firetox a écrit :
Bonjour,

voila il faut rajouter ce code a la ligne 68
remplacer le code

lignevalue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","

par

SI :ValCol[i] = "@NULL" ALORS
lignevalue += "null,"
SINON
lignevalue += :MySQL:mySQLEscapeString(:ValCol[i]) + ","
FIN

comme ca si vous voulez null dans une chaine remplissez le membre par
@NULL
pour le reste pas de changement les numeric et date sont normalement
traité correctement
et vous pouvez laisser le code d'hier cette modif ne concerne que prepare
donc comme mes prepares fonctionnent je ne vois pas le probleme de le
laisser
d'apres mes doc de mise ajour, ce code etait un test qui anticipait en
fait votre probleme, car sur mon doc il y a d'ecrit : attention au insert
groupé qui n'ont pas le meme nombre de colonne (donc je pense que j'avais
cherché deja une solution (en 2005 !!! : que le temps passe vite) mais
cela avait pour certaine base qui ont beaucoup de colonne l'effet de
ralentir un peu le traitement et sur les doc les test sur 500 000 million
d'enreg en insert prenait 3 minutes de plus voila pourqoui il avait ete
mis en commentaire (du moins si j'ai bien ecrit a l'epoque)

essayez ce code et je versionnerais si tout fonctionne

@+


"Jacques TREPP" a écrit dans le message de news:
48c775df$0$7064$
"Firetox" a écrit dans le message de
news:48c6bee5$0$1436$
Bonjour,

dans le SQLinsert de SQLManagerX
vous devez avoir a la ligne 64 :

SI ((:ValCol[i] <> :defCol[i]) ET :extCol[i] <> "auto_increment") ALORS
//OU p_prepare ALORS





Bonjour Frédéric,

je te confirme que, déjà dans la VERSION 3.1.0.3 du 18 mars 2005, le
p_prepare est actif.

cordialement

-- Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)





ok je fais la modif et je modifie mon code en conséquence pour avoir que
des SQLPrepare()

merci

--
Cordialement JeAn-PhI




1 2 3