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

modifier plusieurs querys suite à changement de nom de champ

14 réponses
Avatar
FTH
Bonjour,
Pour différentes raisons, j'ai changé plusieurs noms de champs dans une
table.
pour ce qui est du code vba, pas de soucis, j'ai utilisé le menu "find et
change all" pour passer les nouveaux noms.
par contre, pour les querys, existe il une possibilité de changer, dans
l'ensemble des querys, tous les anciens noms de champs par les nouveaux?

en vous remerciant,

Frédéric

4 réponses

1 2
Avatar
FTH
;-)

"Fabien" wrote in message
news:
FTH a écrit :
Re Bonjour Fabien,

ça semble fonctionner!
la proc allait trop vite je l'ai donc fait tourner au pas à pas (F5) et
c'est ok
et depuis, ça tourne tout seul.
Merci beaucoup ;-)

Tiens, histoire de fignoler, comment pourrait on faire pour avoir une
table avec (par exemple) MyOldField et MyNewField et pouvoir lancer la
proc qui appliquerait toute la liste des modifs?

En te remerciant encore,

Frédéric

"Fabien" wrote in message
news:
FTH a écrit :
Re bonjour Fabien,

je reviens vers toi et ta solution pour remplacer les anciens noms de
champs par les nouveaux.
j'y arrive pas. En fait, ça se bloque (not responding)
Quand je regarde pas à pas, je ne vois apparaitre nulle part le
"contenu" de la query.
par contre, je crois voir, dans le SELECT, toutes les queries
concernées. Ne serait il pas possible de traiter chaque query une à une
genre for each xxx? (je dis ça mais suis pas capable de mettre ça en
oeuvre!)

en te remerciant,

Fréédric

"Fabien" wrote in message
news:eMwy%
FTH a écrit :
Re,

Quand tu dis 'le source', s'agit il du "texte" SQL de la requete?

"Fabien" wrote in message
news:
FTH a écrit :
Bonjour Fabien,

je test mais pas avec bcp de succes.
ps d'erreur qui s'affichent mas un blocage de l'appli..
Glup

Ceci dit, les champs à modifier apparaissent dans
MSysQueries.expression et je ne vois rien dans le code qui fasse
reference à cela..

Merci

Frédéric
"Fabien" wrote in message
news:
FTH a écrit :
Bonjour,
Pour différentes raisons, j'ai changé plusieurs noms de champs
dans une table.
pour ce qui est du code vba, pas de soucis, j'ai utilisé le menu
"find et change all" pour passer les nouveaux noms.
par contre, pour les querys, existe il une possibilité de
changer, dans l'ensemble des querys, tous les anciens noms de
champs par les nouveaux?

en vous remerciant,

Frédéric


Salut,
Je propose une procédure qui te donne le nom de chaque requête de
ta base et pour chacune tu utilises un replace pour changer le nom
du champ

Sub Remplace_dans_query(Ancien as string,nouveau as string)
Dim Rst_Query as dao.recordset
Set Rst_Query =Currentdb.openrecordset("SELECT MSysObjects.Name,
MSysQueries.Attribute
FROM MSysQueries INNER JOIN MSysObjects ON MSysQueries.ObjectId =
MSysObjects.Id
WHERE (((MSysObjects.Name) Not Like '~*') AND
((MSysQueries.Attribute)%5));")
While not Rst_Query.eof

StrSQl=currentdb.querydefs(Rst_Query("Name")).sql
currentdb.querydefs(Rst_Query("Name")).sql =
replace(Strsql,Ancien,Nouveau)
Wend
Rst_Query.close
Set Rst_query=Nothing
end sub

Voilà comme ça à la volée ...
A tester donc ;-)
@+






Suite ...
Effectivement je ne touche pas a la table MSSysQueries. Ne
connaissant pas les conséquences de manip sur les tables systéme, je
regarde mais je touche pô !

L'instruction StrSql=currentdb.querydefs("Nomrequete").sql me permet
de reccuperer le 'source' de la requete "Nomrequete" et de le
modifier à mon grés puis de le réenregistrer par un
currentdb.querydefs("Nomrequete").sql=strsql
@+





oui exactement





Ben c'est fort ça !!!
J'ai testé sur une petite base avec quelques requetes et ça fonctionne.
Quant tu debugge fait un debug.print StrSQl pour voir ce que contient
la chaine. Places en un avant et aprés le replace.
Peux tu me copier/coller le code que tu as mis en place ou mieux mettre
ta base sur cjoint.com si elle est petite.
@+





Bonjour,
Avec
Public Sub Correction()
Dim Rst_Correction as DAO.Recordset
set currentdb.openrecordset("Tbl_Correction")
While not Rst_Correction.eof
Remplace_dans_query Rst_Correction("MyOldField"),
Rst_Correction("MyNewField")
Rst_Correction.movenext
Wend
Rst_Correction.Close
Set Rst_Correction=Nothing
End Sub
Voilà !
@+



Avatar
FTH
;-)

"Fabien" wrote in message
news:
FTH a écrit :
Re Bonjour Fabien,

ça semble fonctionner!
la proc allait trop vite je l'ai donc fait tourner au pas à pas (F5) et
c'est ok
et depuis, ça tourne tout seul.
Merci beaucoup ;-)

Tiens, histoire de fignoler, comment pourrait on faire pour avoir une
table avec (par exemple) MyOldField et MyNewField et pouvoir lancer la
proc qui appliquerait toute la liste des modifs?

En te remerciant encore,

Frédéric

"Fabien" wrote in message
news:
FTH a écrit :
Re bonjour Fabien,

je reviens vers toi et ta solution pour remplacer les anciens noms de
champs par les nouveaux.
j'y arrive pas. En fait, ça se bloque (not responding)
Quand je regarde pas à pas, je ne vois apparaitre nulle part le
"contenu" de la query.
par contre, je crois voir, dans le SELECT, toutes les queries
concernées. Ne serait il pas possible de traiter chaque query une à une
genre for each xxx? (je dis ça mais suis pas capable de mettre ça en
oeuvre!)

en te remerciant,

Fréédric

"Fabien" wrote in message
news:eMwy%
FTH a écrit :
Re,

Quand tu dis 'le source', s'agit il du "texte" SQL de la requete?

"Fabien" wrote in message
news:
FTH a écrit :
Bonjour Fabien,

je test mais pas avec bcp de succes.
ps d'erreur qui s'affichent mas un blocage de l'appli..
Glup

Ceci dit, les champs à modifier apparaissent dans
MSysQueries.expression et je ne vois rien dans le code qui fasse
reference à cela..

Merci

Frédéric
"Fabien" wrote in message
news:
FTH a écrit :
Bonjour,
Pour différentes raisons, j'ai changé plusieurs noms de champs
dans une table.
pour ce qui est du code vba, pas de soucis, j'ai utilisé le menu
"find et change all" pour passer les nouveaux noms.
par contre, pour les querys, existe il une possibilité de
changer, dans l'ensemble des querys, tous les anciens noms de
champs par les nouveaux?

en vous remerciant,

Frédéric


Salut,
Je propose une procédure qui te donne le nom de chaque requête de
ta base et pour chacune tu utilises un replace pour changer le nom
du champ

Sub Remplace_dans_query(Ancien as string,nouveau as string)
Dim Rst_Query as dao.recordset
Set Rst_Query =Currentdb.openrecordset("SELECT MSysObjects.Name,
MSysQueries.Attribute
FROM MSysQueries INNER JOIN MSysObjects ON MSysQueries.ObjectId =
MSysObjects.Id
WHERE (((MSysObjects.Name) Not Like '~*') AND
((MSysQueries.Attribute)%5));")
While not Rst_Query.eof

StrSQl=currentdb.querydefs(Rst_Query("Name")).sql
currentdb.querydefs(Rst_Query("Name")).sql =
replace(Strsql,Ancien,Nouveau)
Wend
Rst_Query.close
Set Rst_query=Nothing
end sub

Voilà comme ça à la volée ...
A tester donc ;-)
@+






Suite ...
Effectivement je ne touche pas a la table MSSysQueries. Ne
connaissant pas les conséquences de manip sur les tables systéme, je
regarde mais je touche pô !

L'instruction StrSql=currentdb.querydefs("Nomrequete").sql me permet
de reccuperer le 'source' de la requete "Nomrequete" et de le
modifier à mon grés puis de le réenregistrer par un
currentdb.querydefs("Nomrequete").sql=strsql
@+





oui exactement





Ben c'est fort ça !!!
J'ai testé sur une petite base avec quelques requetes et ça fonctionne.
Quant tu debugge fait un debug.print StrSQl pour voir ce que contient
la chaine. Places en un avant et aprés le replace.
Peux tu me copier/coller le code que tu as mis en place ou mieux mettre
ta base sur cjoint.com si elle est petite.
@+





Bonjour,
Avec
Public Sub Correction()
Dim Rst_Correction as DAO.Recordset
set currentdb.openrecordset("Tbl_Correction")
While not Rst_Correction.eof
Remplace_dans_query Rst_Correction("MyOldField"),
Rst_Correction("MyNewField")
Rst_Correction.movenext
Wend
Rst_Correction.Close
Set Rst_Correction=Nothing
End Sub
Voilà !
@+



Avatar
FTH
;-)

"Fabien" wrote in message
news:
FTH a écrit :
Re Bonjour Fabien,

ça semble fonctionner!
la proc allait trop vite je l'ai donc fait tourner au pas à pas (F5) et
c'est ok
et depuis, ça tourne tout seul.
Merci beaucoup ;-)

Tiens, histoire de fignoler, comment pourrait on faire pour avoir une
table avec (par exemple) MyOldField et MyNewField et pouvoir lancer la
proc qui appliquerait toute la liste des modifs?

En te remerciant encore,

Frédéric

"Fabien" wrote in message
news:
FTH a écrit :
Re bonjour Fabien,

je reviens vers toi et ta solution pour remplacer les anciens noms de
champs par les nouveaux.
j'y arrive pas. En fait, ça se bloque (not responding)
Quand je regarde pas à pas, je ne vois apparaitre nulle part le
"contenu" de la query.
par contre, je crois voir, dans le SELECT, toutes les queries
concernées. Ne serait il pas possible de traiter chaque query une à une
genre for each xxx? (je dis ça mais suis pas capable de mettre ça en
oeuvre!)

en te remerciant,

Fréédric

"Fabien" wrote in message
news:eMwy%
FTH a écrit :
Re,

Quand tu dis 'le source', s'agit il du "texte" SQL de la requete?

"Fabien" wrote in message
news:
FTH a écrit :
Bonjour Fabien,

je test mais pas avec bcp de succes.
ps d'erreur qui s'affichent mas un blocage de l'appli..
Glup

Ceci dit, les champs à modifier apparaissent dans
MSysQueries.expression et je ne vois rien dans le code qui fasse
reference à cela..

Merci

Frédéric
"Fabien" wrote in message
news:
FTH a écrit :
Bonjour,
Pour différentes raisons, j'ai changé plusieurs noms de champs
dans une table.
pour ce qui est du code vba, pas de soucis, j'ai utilisé le menu
"find et change all" pour passer les nouveaux noms.
par contre, pour les querys, existe il une possibilité de
changer, dans l'ensemble des querys, tous les anciens noms de
champs par les nouveaux?

en vous remerciant,

Frédéric


Salut,
Je propose une procédure qui te donne le nom de chaque requête de
ta base et pour chacune tu utilises un replace pour changer le nom
du champ

Sub Remplace_dans_query(Ancien as string,nouveau as string)
Dim Rst_Query as dao.recordset
Set Rst_Query =Currentdb.openrecordset("SELECT MSysObjects.Name,
MSysQueries.Attribute
FROM MSysQueries INNER JOIN MSysObjects ON MSysQueries.ObjectId =
MSysObjects.Id
WHERE (((MSysObjects.Name) Not Like '~*') AND
((MSysQueries.Attribute)%5));")
While not Rst_Query.eof

StrSQl=currentdb.querydefs(Rst_Query("Name")).sql
currentdb.querydefs(Rst_Query("Name")).sql =
replace(Strsql,Ancien,Nouveau)
Wend
Rst_Query.close
Set Rst_query=Nothing
end sub

Voilà comme ça à la volée ...
A tester donc ;-)
@+






Suite ...
Effectivement je ne touche pas a la table MSSysQueries. Ne
connaissant pas les conséquences de manip sur les tables systéme, je
regarde mais je touche pô !

L'instruction StrSql=currentdb.querydefs("Nomrequete").sql me permet
de reccuperer le 'source' de la requete "Nomrequete" et de le
modifier à mon grés puis de le réenregistrer par un
currentdb.querydefs("Nomrequete").sql=strsql
@+





oui exactement





Ben c'est fort ça !!!
J'ai testé sur une petite base avec quelques requetes et ça fonctionne.
Quant tu debugge fait un debug.print StrSQl pour voir ce que contient
la chaine. Places en un avant et aprés le replace.
Peux tu me copier/coller le code que tu as mis en place ou mieux mettre
ta base sur cjoint.com si elle est petite.
@+





Bonjour,
Avec
Public Sub Correction()
Dim Rst_Correction as DAO.Recordset
set currentdb.openrecordset("Tbl_Correction")
While not Rst_Correction.eof
Remplace_dans_query Rst_Correction("MyOldField"),
Rst_Correction("MyNewField")
Rst_Correction.movenext
Wend
Rst_Correction.Close
Set Rst_Correction=Nothing
End Sub
Voilà !
@+



Avatar
FTH
;-)

"Fabien" wrote in message
news:
FTH a écrit :
Re Bonjour Fabien,

ça semble fonctionner!
la proc allait trop vite je l'ai donc fait tourner au pas à pas (F5) et
c'est ok
et depuis, ça tourne tout seul.
Merci beaucoup ;-)

Tiens, histoire de fignoler, comment pourrait on faire pour avoir une
table avec (par exemple) MyOldField et MyNewField et pouvoir lancer la
proc qui appliquerait toute la liste des modifs?

En te remerciant encore,

Frédéric

"Fabien" wrote in message
news:
FTH a écrit :
Re bonjour Fabien,

je reviens vers toi et ta solution pour remplacer les anciens noms de
champs par les nouveaux.
j'y arrive pas. En fait, ça se bloque (not responding)
Quand je regarde pas à pas, je ne vois apparaitre nulle part le
"contenu" de la query.
par contre, je crois voir, dans le SELECT, toutes les queries
concernées. Ne serait il pas possible de traiter chaque query une à une
genre for each xxx? (je dis ça mais suis pas capable de mettre ça en
oeuvre!)

en te remerciant,

Fréédric

"Fabien" wrote in message
news:eMwy%
FTH a écrit :
Re,

Quand tu dis 'le source', s'agit il du "texte" SQL de la requete?

"Fabien" wrote in message
news:
FTH a écrit :
Bonjour Fabien,

je test mais pas avec bcp de succes.
ps d'erreur qui s'affichent mas un blocage de l'appli..
Glup

Ceci dit, les champs à modifier apparaissent dans
MSysQueries.expression et je ne vois rien dans le code qui fasse
reference à cela..

Merci

Frédéric
"Fabien" wrote in message
news:
FTH a écrit :
Bonjour,
Pour différentes raisons, j'ai changé plusieurs noms de champs
dans une table.
pour ce qui est du code vba, pas de soucis, j'ai utilisé le menu
"find et change all" pour passer les nouveaux noms.
par contre, pour les querys, existe il une possibilité de
changer, dans l'ensemble des querys, tous les anciens noms de
champs par les nouveaux?

en vous remerciant,

Frédéric


Salut,
Je propose une procédure qui te donne le nom de chaque requête de
ta base et pour chacune tu utilises un replace pour changer le nom
du champ

Sub Remplace_dans_query(Ancien as string,nouveau as string)
Dim Rst_Query as dao.recordset
Set Rst_Query =Currentdb.openrecordset("SELECT MSysObjects.Name,
MSysQueries.Attribute
FROM MSysQueries INNER JOIN MSysObjects ON MSysQueries.ObjectId =
MSysObjects.Id
WHERE (((MSysObjects.Name) Not Like '~*') AND
((MSysQueries.Attribute)%5));")
While not Rst_Query.eof

StrSQl=currentdb.querydefs(Rst_Query("Name")).sql
currentdb.querydefs(Rst_Query("Name")).sql =
replace(Strsql,Ancien,Nouveau)
Wend
Rst_Query.close
Set Rst_query=Nothing
end sub

Voilà comme ça à la volée ...
A tester donc ;-)
@+






Suite ...
Effectivement je ne touche pas a la table MSSysQueries. Ne
connaissant pas les conséquences de manip sur les tables systéme, je
regarde mais je touche pô !

L'instruction StrSql=currentdb.querydefs("Nomrequete").sql me permet
de reccuperer le 'source' de la requete "Nomrequete" et de le
modifier à mon grés puis de le réenregistrer par un
currentdb.querydefs("Nomrequete").sql=strsql
@+





oui exactement





Ben c'est fort ça !!!
J'ai testé sur une petite base avec quelques requetes et ça fonctionne.
Quant tu debugge fait un debug.print StrSQl pour voir ce que contient
la chaine. Places en un avant et aprés le replace.
Peux tu me copier/coller le code que tu as mis en place ou mieux mettre
ta base sur cjoint.com si elle est petite.
@+





Bonjour,
Avec
Public Sub Correction()
Dim Rst_Correction as DAO.Recordset
set currentdb.openrecordset("Tbl_Correction")
While not Rst_Correction.eof
Remplace_dans_query Rst_Correction("MyOldField"),
Rst_Correction("MyNewField")
Rst_Correction.movenext
Wend
Rst_Correction.Close
Set Rst_Correction=Nothing
End Sub
Voilà !
@+



1 2