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,

sur quel type de colonne avez vous ce probleme ?
vous passez par un odre SQLMaagerX ?

dans l'insert SQLManagerX sait le faire mais il y a quelque chose a
comprendre avant
par exemple pour les numeriques

la valeur null en SQL = absence de valeur
0 est une valeur et pas null
dans une base si on envoit "" ou 0 alors mySQL stock quelque chose de
different de null

windev
un numerique par defaut vaut 0
on ne peut pas avoir un champs numerique = ""

donc ces 2 etats de fait :
pour envoyer un null dans mySQL il faut que le champs windev ne soit pas
numerique mais texte avec un masque de saisie
SQLManagerX a cela enverra null au lieu de 0 si champs = "" dans un insert
(SQLInsert)
SQLManagerX a cela enverra null au lieu de 0 si champs = "" dans un
update(SQLUpdate)

par contre sur les type chaine c'est plutot difficile car "" sous windev
peut dire null ou "" dans la base et la SQLManagerX ne s'est plus quoi faire
donc il envoi ""

Bon dev
@+


"JeAn-PhI" a écrit dans le message de news:
48c62fbd$0$845$
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




Avatar
JeAn-PhI
Firetox avait énoncé :
Bonjour,

sur quel type de colonne avez vous ce probleme ?
vous passez par un odre SQLMaagerX ?

dans l'insert SQLManagerX sait le faire mais il y a quelque chose a
comprendre avant
par exemple pour les numeriques






......

c'est une colonne de type VARCHAR en MySQL et Chaine en Windev
je suis en train de faire une migration de BDD donc je fais des copies
d'enreg à la main

ce que je voudrais c'est faire :

gclCnxMySQL est un c_mySQL4WD
SI PAS
gclCnxMySQL:mySQLConnecte(gsBaseHost,gsBaseUser,gsBasePasswd,gsBaseDB)
ALORS
TitreSuivant("Connesion serveur SQL")
Erreur("Pas de connexion SQL : "+gclCnxMySQL:mySQLGetErrorMessage())
RETOUR
FIN

gclClient est un c_t_client(gclCnxMySQL,"t_client","gclClient")

gclClient:m_cli_rs = NULL ou DEFAULT // m_cli_rs est une chaine
gclClient:m_cli_tel = "0102030405" // m_cli_tel est une chaine

car si je mets :
gclClient:m_cli_rs = "" // m_cli_rs est une chaine
gclClient:m_cli_tel = "0102030405" // m_cli_tel est une chaine
alors la valeur n'est pas pris en compte dans l'insert j'aurais :
insert into t_client (cli_tel) values ('0102030405')

j'espère avoir été clair

merci

--
Cordialement JeAn-PhI
Avatar
JeAn-PhI
JeAn-PhI a formulé la demande :
Firetox avait énoncé :
Bonjour,

sur quel type de colonne avez vous ce probleme ?
vous passez par un odre SQLMaagerX ?

dans l'insert SQLManagerX sait le faire mais il y a quelque chose a
comprendre avant
par exemple pour les numeriques






......

c'est une colonne de type VARCHAR en MySQL et Chaine en Windev
je suis en train de faire une migration de BDD donc je fais des copies
d'enreg à la main

ce que je voudrais c'est faire :

gclCnxMySQL est un c_mySQL4WD
SI PAS gclCnxMySQL:mySQLConnecte(gsBaseHost,gsBaseUser,gsBasePasswd,gsBaseDB)
ALORS
TitreSuivant("Connesion serveur SQL")
Erreur("Pas de connexion SQL : "+gclCnxMySQL:mySQLGetErrorMessage())
RETOUR
FIN

gclClient est un c_t_client(gclCnxMySQL,"t_client","gclClient")

gclClient:m_cli_rs = NULL ou DEFAULT // m_cli_rs est une chaine
gclClient:m_cli_tel = "0102030405" // m_cli_tel est une chaine

car si je mets :
gclClient:m_cli_rs = "" // m_cli_rs est une chaine
gclClient:m_cli_tel = "0102030405" // m_cli_tel est une chaine
alors la valeur n'est pas pris en compte dans l'insert j'aurais :
insert into t_client (cli_tel) values ('0102030405')

j'espère avoir été clair

merci



petit ajout :
j'ai oublié de préciser c'est pour faire de l'insert de masse

--
Cordialement JeAn-PhI
Avatar
Firetox
Bonjour,

car si je mets :
gclClient:m_cli_rs = "" // m_cli_rs est une chaine
gclClient:m_cli_tel = "0102030405" // m_cli_tel est une chaine
alors la valeur n'est pas pris en compte dans l'insert j'aurais :
insert into t_client (cli_tel) values ('0102030405')





comme je l'ai dit sur les chaine c'est un peu particulier
mais si vous ne remplisser pas le champs et que par default dans le create
table valuer null alors il suffit de ne pas remplir le membre
et la valeur ne sera pas renvoyé

par contre il sera difficile comme je le disait d'avoir '' comme valeur

dans la structure de la table vous devez avoir create table ma table (macol
varchar default null)
dans ce cas ca devrait marché sans remplir le membre

quel est votre create table ?



"JeAn-PhI" a écrit dans le message de news:
48c64073$0$14612$
JeAn-PhI a formulé la demande :
Firetox avait énoncé :
Bonjour,

sur quel type de colonne avez vous ce probleme ?
vous passez par un odre SQLMaagerX ?

dans l'insert SQLManagerX sait le faire mais il y a quelque chose a
comprendre avant
par exemple pour les numeriques






......

c'est une colonne de type VARCHAR en MySQL et Chaine en Windev
je suis en train de faire une migration de BDD donc je fais des copies
d'enreg à la main

ce que je voudrais c'est faire :

gclCnxMySQL est un c_mySQL4WD
SI PAS
gclCnxMySQL:mySQLConnecte(gsBaseHost,gsBaseUser,gsBasePasswd,gsBaseDB)
ALORS
TitreSuivant("Connesion serveur SQL")
Erreur("Pas de connexion SQL : "+gclCnxMySQL:mySQLGetErrorMessage())
RETOUR
FIN

gclClient est un c_t_client(gclCnxMySQL,"t_client","gclClient")

gclClient:m_cli_rs = NULL ou DEFAULT // m_cli_rs est une chaine
gclClient:m_cli_tel = "0102030405" // m_cli_tel est une chaine

car si je mets :
gclClient:m_cli_rs = "" // m_cli_rs est une chaine
gclClient:m_cli_tel = "0102030405" // m_cli_tel est une chaine
alors la valeur n'est pas pris en compte dans l'insert j'aurais :
insert into t_client (cli_tel) values ('0102030405')

j'espère avoir été clair

merci



petit ajout :
j'ai oublié de préciser c'est pour faire de l'insert de masse

--
Cordialement JeAn-PhI




Avatar
JeAn-PhI
Firetox a formulé ce mardi :
Bonjour,

car si je mets :
gclClient:m_cli_rs = "" // m_cli_rs est une chaine
gclClient:m_cli_tel = "0102030405" // m_cli_tel est une chaine
alors la valeur n'est pas pris en compte dans l'insert j'aurais :
insert into t_client (cli_tel) values ('0102030405')





comme je l'ai dit sur les chaine c'est un peu particulier
mais si vous ne remplisser pas le champs et que par default dans le create
table valuer null alors il suffit de ne pas remplir le membre
et la valeur ne sera pas renvoyé

par contre il sera difficile comme je le disait d'avoir '' comme valeur

dans la structure de la table vous devez avoir create table ma table (macol
varchar default null)
dans ce cas ca devrait marché sans remplir le membre

quel est votre create table ?




c'est le cas sauf que quand je fais un insert de masse (SQLPrepare) la
description des colonnes se base sur le 1er enreg donc si j'ai en HF

Client.RS = NULL Client.TEL = "0102030405"
Client.RS = "Raison sociale" Client.TEL = "0504030201"

j'aurais avec SQLManagerX :
insert into t_client (cli_tel) values
('0102030405'),('Raison sociale','0504030201')
et donc j'aurais une erreur

il faut que je fasse un insert enreg par enreg sur 3000 enreg ca peu
aller mais j'ai d'autres tables qui contiennent plus de 70000 enregs et
je pourrais pas faire un insert de masse

--
Cordialement JeAn-PhI
Avatar
Jacques TREPP
"Firetox" a écrit dans le message de
news:48c64550$0$12027$


comme je l'ai dit sur les chaine c'est un peu particulier
mais si vous ne remplisser pas le champs et que par default dans le create
table valuer null alors il suffit de ne pas remplir le membre
et la valeur ne sera pas renvoyé

par contre il sera difficile comme je le disait d'avoir '' comme valeur

dans la structure de la table vous devez avoir create table ma table
(macol varchar default null)
dans ce cas ca devrait marché sans remplir le membre

quel est votre create table ?




Bonjour,

il risque d'y avoir une difficulté lors d'insert en masse, dans la mesure où
il va être obligé de donner une valeur dans 'values', non ?
D'où la necessité d'envoyer '' (quote quote) si la valeur de la colonne est
nulle. Y a-t-il une incidence au fait qu'une colonne non nulle soit vide ?
c'est sûr que le "where macol is null" ne va rien renvoyer.
si c'est une requète pure et dure, on peut utiliser null dans le texte du
"value ()"
cordialement

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

il n' a envoyé que la premiere ligne ?
quel est votre create table ?

ar normalement si la colonne n'est pas obligatoire d'envoyer toutes les
lignes
j'ai deja fait des insert de masse avec et sans probleme mais je ne comprend
pas le probleme que vous avez : c'est pour ca que j'ai besoin de votre
create table
car il va definir ce qui va etre envoyé ou non

Bon dev
@+


"JeAn-PhI" a écrit dans le message de news:
48c649b9$0$943$
Firetox a formulé ce mardi :
Bonjour,

car si je mets :
gclClient:m_cli_rs = "" // m_cli_rs est une chaine
gclClient:m_cli_tel = "0102030405" // m_cli_tel est une chaine
alors la valeur n'est pas pris en compte dans l'insert j'aurais :
insert into t_client (cli_tel) values ('0102030405')





comme je l'ai dit sur les chaine c'est un peu particulier
mais si vous ne remplisser pas le champs et que par default dans le
create table valuer null alors il suffit de ne pas remplir le membre
et la valeur ne sera pas renvoyé

par contre il sera difficile comme je le disait d'avoir '' comme valeur

dans la structure de la table vous devez avoir create table ma table
(macol varchar default null)
dans ce cas ca devrait marché sans remplir le membre

quel est votre create table ?




c'est le cas sauf que quand je fais un insert de masse (SQLPrepare) la
description des colonnes se base sur le 1er enreg donc si j'ai en HF

Client.RS = NULL Client.TEL = "0102030405"
Client.RS = "Raison sociale" Client.TEL = "0504030201"

j'aurais avec SQLManagerX :
insert into t_client (cli_tel) values
('0102030405'),('Raison sociale','0504030201')
et donc j'aurais une erreur

il faut que je fasse un insert enreg par enreg sur 3000 enreg ca peu aller
mais j'ai d'autres tables qui contiennent plus de 70000 enregs et je
pourrais pas faire un insert de masse

--
Cordialement JeAn-PhI




Avatar
JeAn-PhI
Firetox a exposé le 09/09/2008 :
Bonjour,

il n' a envoyé que la premiere ligne ?


non pas du tout
quel est votre create table ?


CREATE TABLE IF NOT EXISTS `MySchema`.`t_client` (
`id_client` CHAR(10) NOT NULL ,
`cli_rs` VARCHAR(50) NULL ,
`cli_tel` VARCHAR(10) NULL ,
PRIMARY KEY (`id_client`) ,
INDEX idx_rs (`cli_rs` ASC) ,
ENGINE = InnoDB

ar normalement si la colonne n'est pas obligatoire d'envoyer toutes les
lignes
j'ai deja fait des insert de masse avec et sans probleme mais je ne comprend
pas le probleme que vous avez : c'est pour ca que j'ai besoin de votre create
table
car il va definir ce qui va etre envoyé ou non

Bon dev
@+




je reprend
lorsque qu'on fait un insert de masse avec SQLPrepare de SQLManagerX
on obtient :
- 1er enreg :
insert into t_client (liste des colonnes pour laquelle il existe une
valeur) values (listes des valeurs correspondantes)

puis
2e enreg :
insert into t_client (liste des colonnes pour laquelle il existe une
valeur) values (listes des valeurs correspondantes)

puis SQLManagerX concatene pour obtenir ceci
insert into t_client (liste des colonnes pour laquelle il existe une
valeur du 1er enreg) values (listes des valeurs correspondantes du 1er
enreg),(listes des valeurs correspondantes du 2e enreg)

or si le 1er enreg n'a pas une valeur dans toutes les colonnes on
obtient :
insert into t_client (id_client,cli_tel) values
('1','0102030405'),
('2','Raison sociale','0504030201')

pour faire un essai faite ceci
créer la table client comme ci dessous
puis faire un insert avec SQLPrepare en indiquant les valeurs sus
citées

--
Cordialement JeAn-PhI
Avatar
Firetox
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


"JeAn-PhI" a écrit dans le message de news:
48c65788$0$951$
Firetox a exposé le 09/09/2008 :
Bonjour,

il n' a envoyé que la premiere ligne ?


non pas du tout
quel est votre create table ?


CREATE TABLE IF NOT EXISTS `MySchema`.`t_client` (
`id_client` CHAR(10) NOT NULL ,
`cli_rs` VARCHAR(50) NULL ,
`cli_tel` VARCHAR(10) NULL ,
PRIMARY KEY (`id_client`) ,
INDEX idx_rs (`cli_rs` ASC) ,
ENGINE = InnoDB

ar normalement si la colonne n'est pas obligatoire d'envoyer toutes les
lignes
j'ai deja fait des insert de masse avec et sans probleme mais je ne
comprend pas le probleme que vous avez : c'est pour ca que j'ai besoin de
votre create table
car il va definir ce qui va etre envoyé ou non

Bon dev
@+




je reprend
lorsque qu'on fait un insert de masse avec SQLPrepare de SQLManagerX on
obtient :
- 1er enreg :
insert into t_client (liste des colonnes pour laquelle il existe une
valeur) values (listes des valeurs correspondantes)

puis
2e enreg :
insert into t_client (liste des colonnes pour laquelle il existe une
valeur) values (listes des valeurs correspondantes)

puis SQLManagerX concatene pour obtenir ceci
insert into t_client (liste des colonnes pour laquelle il existe une
valeur du 1er enreg) values (listes des valeurs correspondantes du 1er
enreg),(listes des valeurs correspondantes du 2e enreg)

or si le 1er enreg n'a pas une valeur dans toutes les colonnes on obtient
:
insert into t_client (id_client,cli_tel) values
('1','0102030405'),
('2','Raison sociale','0504030201')

pour faire un essai faite ceci
créer la table client comme ci dessous
puis faire un insert avec SQLPrepare en indiquant les valeurs sus citées

--
Cordialement JeAn-PhI




Avatar
JeAn-PhI
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
1 2 3