Mise à jour d'enregistrement avec like
PATMAR83
Messages postés
6
Statut
Membre
-
jee pee Messages postés 42398 Statut Modérateur -
jee pee Messages postés 42398 Statut Modérateur -
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 à jour libre office - Accueil - Bureautique
- Mise a jour kindle - Guide
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*'))