Erreur 80040e10 requete excel 2010 . Select ...where champ = txt

Résolu
droupa - 9 sept. 2013 à 17:58
 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

4 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
Modifié par jordane45 le 9/09/2013 à 18:48
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
0
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.
0
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
0
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
0
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
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
9 sept. 2013 à 21:53
0
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
0
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
0
Rejoignez-nous