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
jordane45
Messages postés37851Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 1 décembre 2023343 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 & "' ;"
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 !
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és37851Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 1 décembre 2023343 9 sept. 2013 à 21:53
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 & "' ;"
'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 !
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
10 sept. 2013 à 04:39
essaie avec la forme suivante
sql = "Select * from Produit where codprod=' " & Trim(TxtCodpro.Text) & " ' "
Le 'trim' n'est pas important mais peut toujours servir.
10 sept. 2013 à 07:12
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