j'ai un pb d'ambiguité sur un champ. J'ai un champ identique dans deux
tables (table [B50-composants] et table [B52-Nomenclature]). C'est le champ
posteCharge. Je veux afficher le poste de charge de la table
[B50-composants] (le traitement ici n'a pas d'intérêt, c'est juste pour le
principe).
Par conséquent je mets le nom d'alias de la table devant le nom de champ.
En access cela marche très bien, pas sur sqlserver. Si je mets seulement
postecharge et non plus B50.poste charge, ca fonctionne. Comment faire la
distinction?
voici le code:
Public Function test()
Dim rs_db As New ADODB.Recordset
Dim sql As String
Dim prm As Integer
Dim cpt As Integer
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
David.V
à priori tu devrais l'afficher comme cela :
Debug.Print rs_db("posteCharge").Value
Sans alias donc. Maintenant, si posteCharge est un champs ne donnant pas le même type d'info d'une base à une autre, tu devrais revoir la conception car je trouve pas ça fameux d'avoir des noms qui se recoupent pour des types de données différents. Au pire, change le requete, met les champs au détail (plutot que de mettre *) et définit un alias sur le champs litigieux...
"Pierre-Yves" a écrit dans le message de news:
Bonjour,
j'ai un pb d'ambiguité sur un champ. J'ai un champ identique dans deux tables (table [B50-composants] et table [B52-Nomenclature]). C'est le
champ
posteCharge. Je veux afficher le poste de charge de la table [B50-composants] (le traitement ici n'a pas d'intérêt, c'est juste pour le principe). Par conséquent je mets le nom d'alias de la table devant le nom de champ. En access cela marche très bien, pas sur sqlserver. Si je mets seulement postecharge et non plus B50.poste charge, ca fonctionne. Comment faire la distinction?
voici le code: Public Function test()
Dim rs_db As New ADODB.Recordset Dim sql As String Dim prm As Integer Dim cpt As Integer
Sans alias donc. Maintenant, si posteCharge est un champs ne donnant pas le
même type d'info d'une base à une autre, tu devrais revoir la conception car
je trouve pas ça fameux d'avoir des noms qui se recoupent pour des types de
données différents. Au pire, change le requete, met les champs au détail
(plutot que de mettre *) et définit un alias sur le champs litigieux...
"Pierre-Yves" <py_leteste@hotmail.com> a écrit dans le message de
news:eqaS6znjEHA.2788@tk2msftngp13.phx.gbl...
Bonjour,
j'ai un pb d'ambiguité sur un champ. J'ai un champ identique dans deux
tables (table [B50-composants] et table [B52-Nomenclature]). C'est le
champ
posteCharge. Je veux afficher le poste de charge de la table
[B50-composants] (le traitement ici n'a pas d'intérêt, c'est juste pour le
principe).
Par conséquent je mets le nom d'alias de la table devant le nom de champ.
En access cela marche très bien, pas sur sqlserver. Si je mets seulement
postecharge et non plus B50.poste charge, ca fonctionne. Comment faire la
distinction?
voici le code:
Public Function test()
Dim rs_db As New ADODB.Recordset
Dim sql As String
Dim prm As Integer
Dim cpt As Integer
Sans alias donc. Maintenant, si posteCharge est un champs ne donnant pas le même type d'info d'une base à une autre, tu devrais revoir la conception car je trouve pas ça fameux d'avoir des noms qui se recoupent pour des types de données différents. Au pire, change le requete, met les champs au détail (plutot que de mettre *) et définit un alias sur le champs litigieux...
"Pierre-Yves" a écrit dans le message de news:
Bonjour,
j'ai un pb d'ambiguité sur un champ. J'ai un champ identique dans deux tables (table [B50-composants] et table [B52-Nomenclature]). C'est le
champ
posteCharge. Je veux afficher le poste de charge de la table [B50-composants] (le traitement ici n'a pas d'intérêt, c'est juste pour le principe). Par conséquent je mets le nom d'alias de la table devant le nom de champ. En access cela marche très bien, pas sur sqlserver. Si je mets seulement postecharge et non plus B50.poste charge, ca fonctionne. Comment faire la distinction?
voici le code: Public Function test()
Dim rs_db As New ADODB.Recordset Dim sql As String Dim prm As Integer Dim cpt As Integer
L'alias sur la table est utilisé par SQL Server uniquement pour lever l'ambiguïté dans l'exécution de la commande. Il ne change pas du tout le nom sous lequel est vu le champ dans le jeu de résultat final.
Dans ce cas, il faut utiliser un alias sur la *colonne* qui pose Problème.
Par exemple :
SELECT Société.Nom AS 'Société.Nom',Contact.Nom AS 'Contact.Nom' FROM etc...
Ce qui permettra au niveau du recordset d'utiliser "Société.Nom" ou "Collaborateur.Nom" selon le nom à obtenir....
Patrice
--
"Pierre-Yves" a écrit dans le message de news:
Bonjour,
j'ai un pb d'ambiguité sur un champ. J'ai un champ identique dans deux tables (table [B50-composants] et table [B52-Nomenclature]). C'est le
champ
posteCharge. Je veux afficher le poste de charge de la table [B50-composants] (le traitement ici n'a pas d'intérêt, c'est juste pour le principe). Par conséquent je mets le nom d'alias de la table devant le nom de champ. En access cela marche très bien, pas sur sqlserver. Si je mets seulement postecharge et non plus B50.poste charge, ca fonctionne. Comment faire la distinction?
voici le code: Public Function test()
Dim rs_db As New ADODB.Recordset Dim sql As String Dim prm As Integer Dim cpt As Integer
L'alias sur la table est utilisé par SQL Server uniquement pour lever
l'ambiguïté dans l'exécution de la commande. Il ne change pas du tout le nom
sous lequel est vu le champ dans le jeu de résultat final.
Dans ce cas, il faut utiliser un alias sur la *colonne* qui pose Problème.
Par exemple :
SELECT Société.Nom AS 'Société.Nom',Contact.Nom AS 'Contact.Nom' FROM etc...
Ce qui permettra au niveau du recordset d'utiliser "Société.Nom" ou
"Collaborateur.Nom" selon le nom à obtenir....
Patrice
--
"Pierre-Yves" <py_leteste@hotmail.com> a écrit dans le message de
news:eqaS6znjEHA.2788@tk2msftngp13.phx.gbl...
Bonjour,
j'ai un pb d'ambiguité sur un champ. J'ai un champ identique dans deux
tables (table [B50-composants] et table [B52-Nomenclature]). C'est le
champ
posteCharge. Je veux afficher le poste de charge de la table
[B50-composants] (le traitement ici n'a pas d'intérêt, c'est juste pour le
principe).
Par conséquent je mets le nom d'alias de la table devant le nom de champ.
En access cela marche très bien, pas sur sqlserver. Si je mets seulement
postecharge et non plus B50.poste charge, ca fonctionne. Comment faire la
distinction?
voici le code:
Public Function test()
Dim rs_db As New ADODB.Recordset
Dim sql As String
Dim prm As Integer
Dim cpt As Integer
L'alias sur la table est utilisé par SQL Server uniquement pour lever l'ambiguïté dans l'exécution de la commande. Il ne change pas du tout le nom sous lequel est vu le champ dans le jeu de résultat final.
Dans ce cas, il faut utiliser un alias sur la *colonne* qui pose Problème.
Par exemple :
SELECT Société.Nom AS 'Société.Nom',Contact.Nom AS 'Contact.Nom' FROM etc...
Ce qui permettra au niveau du recordset d'utiliser "Société.Nom" ou "Collaborateur.Nom" selon le nom à obtenir....
Patrice
--
"Pierre-Yves" a écrit dans le message de news:
Bonjour,
j'ai un pb d'ambiguité sur un champ. J'ai un champ identique dans deux tables (table [B50-composants] et table [B52-Nomenclature]). C'est le
champ
posteCharge. Je veux afficher le poste de charge de la table [B50-composants] (le traitement ici n'a pas d'intérêt, c'est juste pour le principe). Par conséquent je mets le nom d'alias de la table devant le nom de champ. En access cela marche très bien, pas sur sqlserver. Si je mets seulement postecharge et non plus B50.poste charge, ca fonctionne. Comment faire la distinction?
voici le code: Public Function test()
Dim rs_db As New ADODB.Recordset Dim sql As String Dim prm As Integer Dim cpt As Integer
On dirait même que d'une manière générale, les select * sont totalement à banir. En effet, si ton modèle de données évolue un peu (genre simple changement de nom d'un champ), tu serais obligé de revoir le code appelant, alors que si tu a explicitement listé les champs à retourner, tu peux au pire mettre un alias directement au niveau procédure stockée, et tu ne changes pas le client... JN.
"David.V" a écrit dans le message de news:%23h$
à priori tu devrais l'afficher comme cela :
Debug.Print rs_db("posteCharge").Value
Sans alias donc. Maintenant, si posteCharge est un champs ne donnant pas
le
même type d'info d'une base à une autre, tu devrais revoir la conception
car
je trouve pas ça fameux d'avoir des noms qui se recoupent pour des types
de
données différents. Au pire, change le requete, met les champs au détail (plutot que de mettre *) et définit un alias sur le champs litigieux...
"Pierre-Yves" a écrit dans le message de news: > Bonjour, > > j'ai un pb d'ambiguité sur un champ. J'ai un champ identique dans deux > tables (table [B50-composants] et table [B52-Nomenclature]). C'est le champ > posteCharge. Je veux afficher le poste de charge de la table > [B50-composants] (le traitement ici n'a pas d'intérêt, c'est juste pour
le
> principe). > Par conséquent je mets le nom d'alias de la table devant le nom de
champ.
> En access cela marche très bien, pas sur sqlserver. Si je mets seulement > postecharge et non plus B50.poste charge, ca fonctionne. Comment faire
la
> distinction? > > voici le code: > Public Function test() > > Dim rs_db As New ADODB.Recordset > Dim sql As String > Dim prm As Integer > Dim cpt As Integer > > > sql = "select * from [B50-composants] B50 JOIN [B52-Nomenclature] B52 ON > B50.[T50-2-code comp] = B52.[T52-2-Code composant maitre] " > rs_db.Open sql, bdd_sql, adOpenKeyset, adLockOptimistic > rs_db.MoveFirst > > > Debug.Print rs_db.Fields(cpt).Name > Debug.Print rs_db("B50.posteCharge").Value > > Next cpt > > rs_db.Close > > End Function > > merci pour vos réponses > >
On dirait même que d'une manière générale, les select * sont totalement à
banir.
En effet, si ton modèle de données évolue un peu (genre simple changement de
nom d'un champ), tu serais obligé de revoir le code appelant, alors que si
tu a explicitement listé les champs à retourner, tu peux au pire mettre un
alias directement au niveau procédure stockée, et tu ne changes pas le
client...
JN.
"David.V" <david_vlm@yahou.fr> a écrit dans le message de
news:%23h$bjXojEHA.1712@TK2MSFTNGP09.phx.gbl...
à priori tu devrais l'afficher comme cela :
Debug.Print rs_db("posteCharge").Value
Sans alias donc. Maintenant, si posteCharge est un champs ne donnant pas
le
même type d'info d'une base à une autre, tu devrais revoir la conception
car
je trouve pas ça fameux d'avoir des noms qui se recoupent pour des types
de
données différents. Au pire, change le requete, met les champs au détail
(plutot que de mettre *) et définit un alias sur le champs litigieux...
"Pierre-Yves" <py_leteste@hotmail.com> a écrit dans le message de
news:eqaS6znjEHA.2788@tk2msftngp13.phx.gbl...
> Bonjour,
>
> j'ai un pb d'ambiguité sur un champ. J'ai un champ identique dans deux
> tables (table [B50-composants] et table [B52-Nomenclature]). C'est le
champ
> posteCharge. Je veux afficher le poste de charge de la table
> [B50-composants] (le traitement ici n'a pas d'intérêt, c'est juste pour
le
> principe).
> Par conséquent je mets le nom d'alias de la table devant le nom de
champ.
> En access cela marche très bien, pas sur sqlserver. Si je mets seulement
> postecharge et non plus B50.poste charge, ca fonctionne. Comment faire
la
> distinction?
>
> voici le code:
> Public Function test()
>
> Dim rs_db As New ADODB.Recordset
> Dim sql As String
> Dim prm As Integer
> Dim cpt As Integer
>
>
> sql = "select * from [B50-composants] B50 JOIN [B52-Nomenclature] B52 ON
> B50.[T50-2-code comp] = B52.[T52-2-Code composant maitre] "
> rs_db.Open sql, bdd_sql, adOpenKeyset, adLockOptimistic
> rs_db.MoveFirst
>
>
> Debug.Print rs_db.Fields(cpt).Name
> Debug.Print rs_db("B50.posteCharge").Value
>
> Next cpt
>
> rs_db.Close
>
> End Function
>
> merci pour vos réponses
>
>
On dirait même que d'une manière générale, les select * sont totalement à banir. En effet, si ton modèle de données évolue un peu (genre simple changement de nom d'un champ), tu serais obligé de revoir le code appelant, alors que si tu a explicitement listé les champs à retourner, tu peux au pire mettre un alias directement au niveau procédure stockée, et tu ne changes pas le client... JN.
"David.V" a écrit dans le message de news:%23h$
à priori tu devrais l'afficher comme cela :
Debug.Print rs_db("posteCharge").Value
Sans alias donc. Maintenant, si posteCharge est un champs ne donnant pas
le
même type d'info d'une base à une autre, tu devrais revoir la conception
car
je trouve pas ça fameux d'avoir des noms qui se recoupent pour des types
de
données différents. Au pire, change le requete, met les champs au détail (plutot que de mettre *) et définit un alias sur le champs litigieux...
"Pierre-Yves" a écrit dans le message de news: > Bonjour, > > j'ai un pb d'ambiguité sur un champ. J'ai un champ identique dans deux > tables (table [B50-composants] et table [B52-Nomenclature]). C'est le champ > posteCharge. Je veux afficher le poste de charge de la table > [B50-composants] (le traitement ici n'a pas d'intérêt, c'est juste pour
le
> principe). > Par conséquent je mets le nom d'alias de la table devant le nom de
champ.
> En access cela marche très bien, pas sur sqlserver. Si je mets seulement > postecharge et non plus B50.poste charge, ca fonctionne. Comment faire
la
> distinction? > > voici le code: > Public Function test() > > Dim rs_db As New ADODB.Recordset > Dim sql As String > Dim prm As Integer > Dim cpt As Integer > > > sql = "select * from [B50-composants] B50 JOIN [B52-Nomenclature] B52 ON > B50.[T50-2-code comp] = B52.[T52-2-Code composant maitre] " > rs_db.Open sql, bdd_sql, adOpenKeyset, adLockOptimistic > rs_db.MoveFirst > > > Debug.Print rs_db.Fields(cpt).Name > Debug.Print rs_db("B50.posteCharge").Value > > Next cpt > > rs_db.Close > > End Function > > merci pour vos réponses > >