Erreur 80040e10 requete excel 2010 . Select ...where champ = txt [Résolu]

- - Dernière réponse :  droupa - 11 sept. 2013 à 16:02
Bonjour,
sous Excel 2010 en macro VB
j'essaie de mettre en place une chaine (string) pour fabriquer l'ordre sql a exécuter lors d'un Open (du type Rst.Open chaine, conn, ....)
j'ai une erreur si je construit chaine avant l'instruction pour bien arranger les choses !
chaine = "Select * from [tableSalle] Where tableSalle.UFSalle = '" & salle & "' ;"
ce qui rend dans l'espion
"Select * from [tableSalle] Where tableSalle.UFSalle = '7500Salle1' ;"

à l'exécution erreur 80040e10 : Aucune valeur donnée pour un ou plusieurs des paramètres requis
salle contient un champ String = "7500Salle1"
salle est passé en valeur dans la fonction qui traite cette requête
salle reçoit un champ lu de la table et en DIM ...as string

la requete est 'simple, mais je n'arrive pas à dire

select * from tableSalle where tabel.UFSalle = "7500Salle1" ;
voilà ce qui devrait, à mon sens être la requête finale

merci de ce que vous pourrez m'en dire, ar avec les recherches, en ajoutant des 'cotes simples' ou doubles quotes',etc rien n'y fait
Afficher la suite 

Votre réponse

4 réponses

Messages postés
23650
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
18 décembre 2018
0
Merci
Bonjour,

Si la requête que tu dois obtenir est :
select * from tableSalle where tabel.UFSalle = "7500Salle1" ; 
voilà ce qui devrait, à mon sens être la requête finale 


Pourquoi as-tu des crochets dans celle que tu construit ?
chaine = "Select * from [tableSalle] Where 
tableSalle.UFSalle = '" & salle & "' ;" 





Cordialement,
Jordane
salut,
essaie avec la forme suivante

sql = "Select * from Produit where codprod=' " & Trim(TxtCodpro.Text) & " ' "
Le 'trim' n'est pas important mais peut toujours servir.
Merci je viens d'essayer cette technique...
mais j'obtiens par cette manière où par d'autres artifices (chr(39),etc...) la même chaine (disons 'sql' comme envoyée),
composée de, successivement :
"
select ......where critere =
simple cote
valeur du critere
simple cote
"
qui une fois exécutée par Rst.Open sql,...
rend l'erreur 80040e10 ?!!

personne n'a déjà fait celà ?
le critère est un champ de liste déroulante (combo) mis dans une Form....
quand je clique sur la combo, j'execute cette fonction de forme:
sub toto(param)
.....
Open sql,...
end sub

bien sûr la valeur du critère (param) change avec le choix dans la combo...
au final
critere='valeur' , entre simple côte ne semble pas lui plaire !

merci encore
Commenter la réponse de jordane45
0
Merci
Bonsoir, j'ai récupéré du code qui mettait ces 'braquets' j'ai en fait du code plus haut dans le programme qui marche:
Rst.Open "Select * from [tableSalle] Where tableSalle.NoIdSalle= " & NB & " ;", _
Conn, adOpenKeyset, adLockOptimistic
c'est du code récupéré...
j'ai voulu faire la même chose avec un champ texte, contenant du texte, alors que NB ici est un IDentifiant de la base de données
ailleurs j'ai encore:
Rst.Open "Select * from [" & N & "]", Conn, adOpenKeyset, adLockOptimistic
écrit encore différemment ! et qui marchent !!
j'ai moi, voulu écrire une requête sur un autre critère...
...mais écrite à l'identique du premier çà met l'erreur 800...
je trouve que la syntaxe est difficile à mettre au point pour une simple requête qui devrait donc être:
Rst.Open "Select * from [tableSalle] Where tableSalle.UFSalle= " & Sallecherche & " ;", _
Conn, adOpenKeyset, adLockOptimistic
si je lance çà, il sort une autre erreur 80040e14
erreur de syntaxe opérateur absent dans l'expression:
'tableSalle.UFSalle = 7500Salle1'
il manque les cotes...
merci de votre intérêt
Re, je rajoute qu'il y a plusieurs lignes qui correspondent au résultat de la query ! aussi je me demande si ce genre de requête peut ramener plusieurs enregistrements...que je voudrais parcourir afin de faire un traitement spécifique. Donc le but est de ramener environ une dizaine de lignes (dans Rst je suppose et de lire ces données...je ne sais pas encore comment..j'avance à petit pas...
Merci
jordane45
Messages postés
23650
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
18 décembre 2018
-
Commenter la réponse de droupa
0
Merci
Bonjour, je n'ai toujours pas de code valide pour exprimer ce select?
la table à lire est une plage nommée dans un autre dossier: tableSalle
et la colonne de recherche UFSalle
je voudrais récuperer dans un résultat (Rst) une colonne spécifique.
en sql simple on écrirait
select colonneXdelatableY from TableY where colonneZdelatableY = valeur d'une variable passée en valeur dans la fonction encapsulant cette recherche:
je recopie le code tel que de ma fonction:
Private Sub RechercheHeuresDisponibles(daterdv, salle)

Dim chaine As Variant
EnregDépart = Rst.AbsolutePosition
'La connection supporte déjà l'ouverture d'un recordSet
'Elle ne peut pas en suppoter 2 simultanément
'Anéantir le premier Rst
Set Rst = Nothing
datecherche = daterdv
'Ouverture d'un second recordset approprié à la
'recherche de l'enregistrement sur champ désiré

'tableSalle est une plage nommée dans une étape antérieure
'HEURESalle et UFSalle des colonnes de la table
chaine = "Select [tableSalle].HEURESalle from [tableSalle] where [tableSalle].UFSalle = '" & salle & "' ;"

Rst.Open chaine, Conn, adOpenKeyset, adLockOptimistic

'la mise à jour du combobox doit se faire que si trouvé
'l'enregistrement a été trouvé...
If Rst.RecordCount > 0 Then
MsgBox "trouvé: " & Rst.RecordCount
Else
NB = EnregDépart
MsgBox "L'enregistrement demandé n'a pas été trouvé.", _
vbInformation + vbOKOnly, "Pas trouvé"
End If
'opération Revenir au premier RecordSet ouvert initial
Set Rst = Nothing
Rst.Open "Select * from [tableSalle]", Conn, adOpenKeyset, adLockOptimistic
Rst.Move NB - 1 'le recordset doit se rendre (positionner)sur le
'recordset affiché par la recherche afin que les boutons
'de déplacements retrouvent un fonctionnement adéquat.
End Sub



ce qui est sûr c'est que la deuxieme query,réaffectant la selection globale marche !

Merci de votre aide
Commenter la réponse de droupa
0
Merci
Bonjour,
j'ai finalement pu résoudre le problème, il faut faire une fonction qui remplace la cote simple en double cote, et l'utiliser dans la chaine qui compose l'instruction SQL
qry = "SELECT [tableSalle].[HEURE] FROM [tableSalle] WHERE [tableSalle].UF='" & Pure(sallecherche) & "';"

avec la fonction:
Public Function Pure(S As String) As String
Pure = Replace(S, "'", "''")
End Function

merci au forum, et à :
http://forum.hardware.fr/hfr/Programmation/VB-VBA-VBS/afficher-resultat-recordset-sujet_128578_1.htm
Commenter la réponse de droupa

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.