0
votes

Problème: erreur '3075' Erreur de syntaxe (opérateur manquant) accès 2013

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!


0 commentaires

3 Réponses :


0
votes

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.


0 commentaires

0
votes

Les éléments suivants doivent être pris en compte:

  • Si vous avez des noms de champ avec un espace vide à l'intérieur comme Nom du fournisseur , vous devrez l'entourer de crochets: [Nom du fournisseur] .
  • Les crochets () ne sont pas vraiment nécessaires dans votre cas. Vous pouvez les omettre.
  • Au lieu d'utiliser deux guillemets ( "" ), 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?


0 commentaires

0
votes

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.


0 commentaires