Mise à jour d'enregistrement avec like
PATMAR83
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
jee pee Messages postés 41543 Date d'inscription Statut Modérateur Dernière intervention -
jee pee Messages postés 41543 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'ai écrit du code afin de détecter la présence de différents mots dans un libellé (libelle 1)
En fonction de la présence ou pas de ces différents mots (mot d'un dico) et de 2 autres critère (code NAT_GES et class_erp), je mets à jour un champ Catégory
Pour m'aider , à ce stade j'ai mis des messages d'info qui me permettent de confirmer la présence des mots du dico
La détection se fait correctement mais la mise à jour ne s'effectue pas car il semble que le critère like "mot du dico" ne soit pas pris en compte dans le where
Ainsi, j'ai tous les champs qui passe à ACH01 ou ACH02
Comment peut-on s'y prendre pour que cette clause like soit bien pris en compte
j'ai écrit du code afin de détecter la présence de différents mots dans un libellé (libelle 1)
En fonction de la présence ou pas de ces différents mots (mot d'un dico) et de 2 autres critère (code NAT_GES et class_erp), je mets à jour un champ Catégory
Pour m'aider , à ce stade j'ai mis des messages d'info qui me permettent de confirmer la présence des mots du dico
La détection se fait correctement mais la mise à jour ne s'effectue pas car il semble que le critère like "mot du dico" ne soit pas pris en compte dans le where
Ainsi, j'ai tous les champs qui passe à ACH01 ou ACH02
Comment peut-on s'y prendre pour que cette clause like soit bien pris en compte
Private Sub CATEGORY1_GotFocus() Dim DB As DAO.Database: Set DB = CurrentDb Dim r As DAO.Recordset: Set r = DB.OpenRecordset("TRANSFERT", dbOpenTable) Dim libel As String Dim mypos As Variant Dim mypos1 As Variant Dim mypos2 As Variant Dim mypos3 As Variant Dim mypos4 As Variant Dim strsql As String Dim strsql1 As String Dim strpln As String Dim strcol As String Dim strloc As String Dim strgr As String Dim strsil As String strplan = "PLAN" 'mot dico strcol = "COLLE" 'mot dico strloc = "LOCTITE" 'mot dico strgr = "GRAISSE" 'mot dico strsil = "SILICON" 'mot dico libel = [libellé 1] 'valeur du champ libelle 1 mypos = InStr(1, libel, strplan) 'libellé contient le mot plan mypos1 = InStr(1, libel, strcol) 'libellé contient le mot colle mypos2 = InStr(1, libel, strloc) 'libellé contient le mot loctite mypos3 = InStr(1, libel, strsil) 'libellé contient le mot silicone mypos4 = InStr(1, libel, strgr) 'libellé contient le mot graisse If mypos > 0 Or mypos1 > 0 Or mypos2 > 0 Or mypos3 > 0 Or mypos4 > 0 Then 'test sur la presence d'un mot du dico MsgBox "chaine trouvée" 'mise à jour du champ categorie si le champ libel contient un mot du dico strsql = "UPDATE [TRANSFERT] SET [TRANSFERT].category='ACH02' WHERE " _ & " (((TRANSFERT.NAT_GES)='12' Or (TRANSFERT.NAT_GES)='73' Or (TRANSFERT.NAT_GES)='22') AND" _ & " ((TRANSFERT.[libellé 1]) Like '*silicone*' Or (TRANSFERT.[libellé 1]) Like '*colle*' Or" _ & " (TRANSFERT.[libellé 1]) Like '*loctite*' Or (TRANSFERT.[libellé 1]) Like '*graisse*') AND ((TRANSFERT.CLASS_ERP)='ELT STANDARD'))" CurrentDb.Execute strsql Else MsgBox "chaine recherche pas trouve" 'mise à jour du champ categorie si le champ libel ne contient pas un mot du dico strsql1 = "UPDATE [TRANSFERT] SET [TRANSFERT].category='ACH01' WHERE " _ & " (((TRANSFERT.NAT_GES)='12' Or (TRANSFERT.NAT_GES)='73' Or (TRANSFERT.NAT_GES)='22') AND" _ & " ((TRANSFERT.[libellé 1]) not like '*silicone*' Or (TRANSFERT.[libellé 1]) not like '*colle*' Or" _ & " (TRANSFERT.[libellé 1]) not like '*loctite*' Or (TRANSFERT.[libellé 1]) not like '*graisse*') AND ((TRANSFERT.CLASS_ERP)='ELT STANDARD'))" CurrentDb.Execute strsql1 End If End Sub
A voir également:
- Mise à jour d'enregistrement avec like
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Mise a jour chromecast - Accueil - Guide TV et vidéo
- Mise a jour kindle - Guide
- Mise à jour libre office - Accueil - Bureautique
3 réponses
Salut,
Ca coince dans les deux cas ?
A+ blux
Ca coince dans les deux cas ?
A+ blux
"Les cons, ça ose tout. C'est même à ça qu'on les reconnait"
oui, le champ catégorie prend en réalité la valeur du dernier enregistrement rencontré
C'est à dire que le champ catégorie passe à ACH02 lorsqu'il rencontre un mot du dico, mais s'il rencontre aprés un champ ou aucun mot du dico s'y trouve, alors tous les champs passent à ACH01
C'est à dire que le champ catégorie passe à ACH02 lorsqu'il rencontre un mot du dico, mais s'il rencontre aprés un champ ou aucun mot du dico s'y trouve, alors tous les champs passent à ACH01
Salut,
Quelques observations :
1/ Tu as des références en majuscules et tu testes des minuscules
strcol = "COLLE" VS like '*colle*'
2/ orthographe pas cohérente : SILICON vs '*silicone*'
3/ En logique l'inverse de
A LIKE 'X' OR B LIKE 'Z'
ce devrait être
A NOT LIKE 'X' AND B NOT LIKE 'Z'
ou plus facile
NOT (A LIKE 'X' OR B LIKE 'Z' )
donc ta seconde commande
(NOT( (TRANSFERT.[libellé 1]) Like '*silicone*' Or (TRANSFERT.[libellé 1]) Like '*colle*' Or" _
& " (TRANSFERT.[libellé 1]) Like '*loctite*' Or (TRANSFERT.[libellé 1]) Like '*graisse*'))
Quelques observations :
1/ Tu as des références en majuscules et tu testes des minuscules
strcol = "COLLE" VS like '*colle*'
2/ orthographe pas cohérente : SILICON vs '*silicone*'
3/ En logique l'inverse de
A LIKE 'X' OR B LIKE 'Z'
ce devrait être
A NOT LIKE 'X' AND B NOT LIKE 'Z'
ou plus facile
NOT (A LIKE 'X' OR B LIKE 'Z' )
donc ta seconde commande
(NOT( (TRANSFERT.[libellé 1]) Like '*silicone*' Or (TRANSFERT.[libellé 1]) Like '*colle*' Or" _
& " (TRANSFERT.[libellé 1]) Like '*loctite*' Or (TRANSFERT.[libellé 1]) Like '*graisse*'))