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

Pb OleDbDataAdapter

5 réponses
Avatar
Emilie
Bonjour

Je fais une requete paramétrée sur deux tables Access
et j'ai un problème avec cette ligne :

myOleDbDataAdapter.SelectCommand.parameters(MaTab1.LeChamps).value="MaTab2.Lechamps"
elle ne trouve pas d'enregistrement, par contre si je mets la valeur :
myOleDbDataAdapter.SelectCommand.parameters(MaTab1.LeChamps).value="ToTo"
cela fonctionne

Pouvez-vous m'indiquer l'erreur de la premiere ligne

Merci par avance
Emilie

5 réponses

Avatar
Patrice
J'ai l'impression que tu t'attends à ce que l'on ait :
- WHERE MaValeur=MaTab2.Lechamps

MaTab2.LeChamps étant une colonne accessible dans la requête. En fait on
obtiendra :
- WHERE MaValeur='MaTab2.Lechamps' donc on compare avec la chaîne de
caractère 'MaTab2.Lechamps'

Difficile de dire quoi faire faute de connaitre le but mais je pense que là
on devrait sans doute avoir carrément une requête SQL différente plutôt que
de jouer sur un simple paramètre. Ne mettre des paramètres qyue pour
rempalcer les valeurs littérales.

--
Patrice

"Emilie" a écrit dans le message de groupe de
discussion : 48f35d1b$0$887$
Bonjour

Je fais une requete paramétrée sur deux tables Access
et j'ai un problème avec cette ligne :

myOleDbDataAdapter.SelectCommand.parameters(MaTab1.LeChamps).value="MaTab2.Lechamps"
elle ne trouve pas d'enregistrement, par contre si je mets la valeur :
myOleDbDataAdapter.SelectCommand.parameters(MaTab1.LeChamps).value="ToTo"
cela fonctionne

Pouvez-vous m'indiquer l'erreur de la premiere ligne

Merci par avance
Emilie




Avatar
Emilie
Bonjour Patrice

Merci pour ta réponse, mais je ne comprends pas,
dans le select de la première table j'ai un champs MaTable2.Lechamps
dans celui de la seconde j'ai un champs MaTable1.Lechamps

donc je souhaite écrire whère MaTable1.Lechamps=MaTab2.Lechamps

Emilie

"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

J'ai l'impression que tu t'attends à ce que l'on ait :
- WHERE MaValeur=MaTab2.Lechamps

MaTab2.LeChamps étant une colonne accessible dans la requête. En fait on
obtiendra :
- WHERE MaValeur='MaTab2.Lechamps' donc on compare avec la chaîne de
caractère 'MaTab2.Lechamps'

Difficile de dire quoi faire faute de connaitre le but mais je pense que
là on devrait sans doute avoir carrément une requête SQL différente plutôt
que de jouer sur un simple paramètre. Ne mettre des paramètres qyue pour
rempalcer les valeurs littérales.

--
Patrice

"Emilie" a écrit dans le message de groupe de
discussion : 48f35d1b$0$887$
Bonjour

Je fais une requete paramétrée sur deux tables Access
et j'ai un problème avec cette ligne :

myOleDbDataAdapter.SelectCommand.parameters(MaTab1.LeChamps).value="MaTab2.Lechamps"
elle ne trouve pas d'enregistrement, par contre si je mets la valeur :
myOleDbDataAdapter.SelectCommand.parameters(MaTab1.LeChamps).value="ToTo"
cela fonctionne

Pouvez-vous m'indiquer l'erreur de la premiere ligne

Merci par avance
Emilie







Avatar
Patrice
Donc le problème est qu'au lieu de produire

where MaTable1.Lechamps=MaTab2.Lechamps

Tu obtiens

whère MaTable1.Lechamps='MaTab2.Lechamps'

Exactement comme dans le deuxième cas tu as :

where MaTable1.Lechamps='Toto'

Et non pas :

whère MaTable1.Lechamps=Toto

Un paramètre permet de remplacer une valeur littérale (la vlaeur d'un
nombre, d'une date, d'un booléean etc...) pas de remplacer arbitrairement
n'importe quelle partie d'une instruction SQL.

--
Patrice

"Emilie" a écrit dans le message de groupe de
discussion : 48f36aec$0$905$
Bonjour Patrice

Merci pour ta réponse, mais je ne comprends pas,
dans le select de la première table j'ai un champs MaTable2.Lechamps
dans celui de la seconde j'ai un champs MaTable1.Lechamps

donc je souhaite écrire whère MaTable1.Lechamps=MaTab2.Lechamps

Emilie

"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

J'ai l'impression que tu t'attends à ce que l'on ait :
- WHERE MaValeur=MaTab2.Lechamps

MaTab2.LeChamps étant une colonne accessible dans la requête. En fait on
obtiendra :
- WHERE MaValeur='MaTab2.Lechamps' donc on compare avec la chaîne de
caractère 'MaTab2.Lechamps'

Difficile de dire quoi faire faute de connaitre le but mais je pense que
là on devrait sans doute avoir carrément une requête SQL différente
plutôt que de jouer sur un simple paramètre. Ne mettre des paramètres
qyue pour rempalcer les valeurs littérales.

--
Patrice

"Emilie" a écrit dans le message de groupe de
discussion : 48f35d1b$0$887$
Bonjour

Je fais une requete paramétrée sur deux tables Access
et j'ai un problème avec cette ligne :

myOleDbDataAdapter.SelectCommand.parameters(MaTab1.LeChamps).value="MaTab2.Lechamps"
elle ne trouve pas d'enregistrement, par contre si je mets la valeur :
myOleDbDataAdapter.SelectCommand.parameters(MaTab1.LeChamps).value="ToTo"
cela fonctionne

Pouvez-vous m'indiquer l'erreur de la premiere ligne

Merci par avance
Emilie











Avatar
Emilie
Bonjour Patrice

Alors comment dois-je écrire cette ligne de code ?

Emilie
"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

Donc le problème est qu'au lieu de produire

where MaTable1.Lechamps=MaTab2.Lechamps

Tu obtiens

whère MaTable1.Lechamps='MaTab2.Lechamps'

Exactement comme dans le deuxième cas tu as :

where MaTable1.Lechamps='Toto'

Et non pas :

whère MaTable1.Lechamps=Toto

Un paramètre permet de remplacer une valeur littérale (la vlaeur d'un
nombre, d'une date, d'un booléean etc...) pas de remplacer arbitrairement
n'importe quelle partie d'une instruction SQL.

--
Patrice

"Emilie" a écrit dans le message de groupe de
discussion : 48f36aec$0$905$
Bonjour Patrice

Merci pour ta réponse, mais je ne comprends pas,
dans le select de la première table j'ai un champs MaTable2.Lechamps
dans celui de la seconde j'ai un champs MaTable1.Lechamps

donc je souhaite écrire whère MaTable1.Lechamps=MaTab2.Lechamps

Emilie

"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

J'ai l'impression que tu t'attends à ce que l'on ait :
- WHERE MaValeur=MaTab2.Lechamps

MaTab2.LeChamps étant une colonne accessible dans la requête. En fait on
obtiendra :
- WHERE MaValeur='MaTab2.Lechamps' donc on compare avec la chaîne de
caractère 'MaTab2.Lechamps'

Difficile de dire quoi faire faute de connaitre le but mais je pense que
là on devrait sans doute avoir carrément une requête SQL différente
plutôt que de jouer sur un simple paramètre. Ne mettre des paramètres
qyue pour rempalcer les valeurs littérales.

--
Patrice

"Emilie" a écrit dans le message de groupe de
discussion : 48f35d1b$0$887$
Bonjour

Je fais une requete paramétrée sur deux tables Access
et j'ai un problème avec cette ligne :

myOleDbDataAdapter.SelectCommand.parameters(MaTab1.LeChamps).value="MaTab2.Lechamps"
elle ne trouve pas d'enregistrement, par contre si je mets la valeur :
myOleDbDataAdapter.SelectCommand.parameters(MaTab1.LeChamps).value="ToTo"
cela fonctionne

Pouvez-vous m'indiquer l'erreur de la premiere ligne

Merci par avance
Emilie














Avatar
Patrice
Donc utiliser le nom de champ directement dans le texte de la requête
générée. N'utiliser le paramètres que pour alimenter les paramètres. Exemple
:

cmd = New Data.OleDb.OleDbCommand("SELECT * FROM " & MyTable & " WHERE
MonChamp=?")

Le Nom de la table est directement inséré dans l'instruction SQL à partir
d'une variable. Pour la valeur cherché on utilise une valeur litérale et on
utilise donc un paramètre...

Eventuellement donner le contexte peut aider (le fait d'avoir un nom de
champ ou de table en "paramètre" est relativement peut courant) surtout que
cela semble être dans ton cas pour faire une jointure (l'utilisateur peut
dire avec quelle table il faut faire la jointure ???) ?

--
Patrice