Est-ce que l'un de vous peut me dire ce qui ne va pas avec mes codes:
Private Sub Command379_Click Dim strsearch as String Dim strText as String strText = Me.TxtSearch.Value strsearch = "Select * from qryInfo where ((Supplier Name LIKE ""*" & strText & "*"") OR (Type LIKE ""*" & strText & "*""))" Me.RecordSource = strsearch End Sub
Merci beaucoup!
3 Réponses :
Si vous voulez faire correspondre du texte qui inclut des guillemets doubles, veuillez suivre ici:
texte:
"""" & "abc" & """" (4 double quotation marks are necessary)
texte dans VBA:
"abc"
Merci.
Les éléments suivants doivent être pris en compte:
Nom du fournisseur
, vous devrez l'entourer de crochets: [Nom du fournisseur]
. ()
ne sont pas vraiment nécessaires dans votre cas. Vous pouvez les omettre. ""
), pour ajouter un guillemet littéral, vous pouvez utiliser un guillemet simple ( '
) à la place, ce qui fait il est plus clair à lire. Type
est un mot réservé. Si possible, vous ne devriez pas l'utiliser. Le minimum serait de l'entourer également de crochets ( [Type]
). Si votre chaîne SQL est vraiment divisée en plusieurs lignes dans VBA, vous devrez la gérer explicitement en utilisant des traits de soulignement ( _
) et une concaténation de chaînes:
strSearch = "Select * From qryInfo Where [Supplier Name] Like '*" & strText & "*' Or [Type] Like '*" & strText & "*'"
Vous pouvez également utiliser ceci:
strTest = "This is a string" strTest = strTest & " defined in several" strTest = strTest & " lines of code in VBA."
Donc, enfin, votre SQL (sur une seule ligne) contenant VBA serait le suivant:
strTest = "This is a string" & _ " defined in several" & _ " lines of code in VBA."
Important aussi:
Sachez que votre approche actuelle, utilisant la concaténation de chaînes, n'évite pas l'injection SQL, qui est un vrai problème de sécurité!
Jetez un œil ici pour savoir comment gérer mieux (par exemple en utilisant des requêtes de paramètres dans VBA): Comment utiliser les paramètres dans VBA dans les différents contextes de Microsoft Access?
N'avoir rien d'autre que des jokers équivaut à n'avoir aucun critère WHERE. Vous n'avez donc pas besoin d'une instruction WHERE.
… ... cela dit - je vous recommande de créer la requête en utilisant la vue Création de requête, puis une fois qu'elle renvoie les enregistrements que vous jugez corrects - utilisez l'option pour l'afficher dans SQL View. Cela vous donnera la syntaxe.