Access comp° champ / valeurs dattributs table
Résolu
starnours
Messages postés
48
Date d'inscription
Statut
Membre
Dernière intervention
-
ankatsoun -
ankatsoun -
Bonjour,
Je recherche le moyen de comparer un champ avec toutes les valeurs d'une table.
En gros, je veux faire une condition qui dit : si la valeur de mon champ est dans le résultat d'une requete (un seul attribut), alors blablabla
J'ai vu la 'fonction' DLookup qui pouvait être utilisée mais elle prend la première valeur de la table, Donc ma question est :
Peux on utliser DLookup dans une boucle qui permettrait de tester avec toutes les valeurs (au fur et à mesure du parcours de la boucle) si la valeur de mon champ est dans la colonne de ma table.
Il doit avoir un autre moyen dans le genre avec une boucle While ou for ... mais erf, j'y arrive pas.j'ai dejà tenté quelques boucles et ca n'a rien donné
Merci d'avance.
Je recherche le moyen de comparer un champ avec toutes les valeurs d'une table.
En gros, je veux faire une condition qui dit : si la valeur de mon champ est dans le résultat d'une requete (un seul attribut), alors blablabla
J'ai vu la 'fonction' DLookup qui pouvait être utilisée mais elle prend la première valeur de la table, Donc ma question est :
Peux on utliser DLookup dans une boucle qui permettrait de tester avec toutes les valeurs (au fur et à mesure du parcours de la boucle) si la valeur de mon champ est dans la colonne de ma table.
Il doit avoir un autre moyen dans le genre avec une boucle While ou for ... mais erf, j'y arrive pas.j'ai dejà tenté quelques boucles et ca n'a rien donné
Merci d'avance.
A voir également:
- Access comp° champ / valeurs dattributs table
- Table ascii - Guide
- Table des matières word - Guide
- Excel champ calculé avec condition - Forum Excel
- Table des figures google doc ✓ - Forum Word
- Table des caractères - Guide
20 réponses
Salut,
Si j'ai bien compris tu veux vérifier si une donnée saisie dans un champ existe dans une table ?
Si j'ai bien compris tu veux vérifier si une donnée saisie dans un champ existe dans une table ?
Private Sub Véhicule_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim varX As Variant
varX = DLookup("[id_ Véhicules]", "[VehiculeAntoine]", "[plus_fabriqué]= True")
MsgBox varX
If (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule] = varX) Then
MsgBox "condition 1 ok"
End If
If (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![iCoefVehicule].Value <> "") Then
MsgBox "condition 2 ok"
End If
If (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule].Value = "") And (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![iCoefVehicule].Value <> "") Then
MsgBox "condition 1 & 2 ok"
'Forms![Form Modification des Lignes]!Commande234.SetFocus
'Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule].Enabled = False
'MsgBox "Attention, véhicule masqué car plus fabriqué, pas de modification possible"
End If
End Sub
Dim varX As Variant
varX = DLookup("[id_ Véhicules]", "[VehiculeAntoine]", "[plus_fabriqué]= True")
MsgBox varX
If (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule] = varX) Then
MsgBox "condition 1 ok"
End If
If (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![iCoefVehicule].Value <> "") Then
MsgBox "condition 2 ok"
End If
If (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule].Value = "") And (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![iCoefVehicule].Value <> "") Then
MsgBox "condition 1 & 2 ok"
'Forms![Form Modification des Lignes]!Commande234.SetFocus
'Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule].Enabled = False
'MsgBox "Attention, véhicule masqué car plus fabriqué, pas de modification possible"
End If
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu travailles directement dans la table ? sans passer par une requête SQL ?
Il est préférable de passer par une requête SELECT et ensuite tester le recordset ...
SELECT * FROM maTable WHERE champDeMaTable = variableAtester
Il est préférable de passer par une requête SELECT et ensuite tester le recordset ...
SELECT * FROM maTable WHERE champDeMaTable = variableAtester
voici ma requête :
Select VA.[id_ Véhicules]
FROM [Association Fiche caisse] AFC, VehiculeAntoine VA
WHERE AFC.id_véhiculeOpep = VA.[id_ Véhicules]
AND VA.plus_fabriqué= True;
Mai voila, j'ai pas réussi à l'utiliser correctement dans le code....
Select VA.[id_ Véhicules]
FROM [Association Fiche caisse] AFC, VehiculeAntoine VA
WHERE AFC.id_véhiculeOpep = VA.[id_ Véhicules]
AND VA.plus_fabriqué= True;
Mai voila, j'ai pas réussi à l'utiliser correctement dans le code....
Dim varX As Variant
Dim base As Database
Dim rs As Recordset
Dim requete As String
requete = "Select VA.[id_ Véhicules] FROM [Association Fiche caisse] AFC, VehiculeAntoine VA WHERE AFC.id_véhiculeOpep = VA.[id_ Véhicules] AND VA.plus_fabriqué= True;"
Set base = CurrentDb
Set rs = base.OpenRecordset(requete, dbDynaset)
rep = rs![id_véhicule]
MsgBox rep
Si je code ca, ca marche pas, je vois pas pourquoi! vous voyez vous?
Dim base As Database
Dim rs As Recordset
Dim requete As String
requete = "Select VA.[id_ Véhicules] FROM [Association Fiche caisse] AFC, VehiculeAntoine VA WHERE AFC.id_véhiculeOpep = VA.[id_ Véhicules] AND VA.plus_fabriqué= True;"
Set base = CurrentDb
Set rs = base.OpenRecordset(requete, dbDynaset)
rep = rs![id_véhicule]
MsgBox rep
Si je code ca, ca marche pas, je vois pas pourquoi! vous voyez vous?
dsl de répondre si tard mais j'étais occupé:
Voilà ce que j'ai trouvé sur l'erreur 3001 sur le site : https://support.microsoft.com/fr-fr/help/202955
Symptômes
Vous filtrez quand un jeu d'enregistrements pour un champ caractère qui contient plus de un guillemet simple par exemple CompanyName = Pub d'O'Riley l'un des messages d'erreur suivants s'affiche :
Erreur d'exécution "3001" Arguments ne sont pas le bon type, sont hors des limites acceptables ou sont en conflit avec la une d'autre.
-ou--
Erreur d'exécution "-2147024809 (80070057)" : le paramètre est incorrect.
Il y a peut être un champ avec un guillemet simple ...
Voilà ce que j'ai trouvé sur l'erreur 3001 sur le site : https://support.microsoft.com/fr-fr/help/202955
Symptômes
Vous filtrez quand un jeu d'enregistrements pour un champ caractère qui contient plus de un guillemet simple par exemple CompanyName = Pub d'O'Riley l'un des messages d'erreur suivants s'affiche :
Erreur d'exécution "3001" Arguments ne sont pas le bon type, sont hors des limites acceptables ou sont en conflit avec la une d'autre.
-ou--
Erreur d'exécution "-2147024809 (80070057)" : le paramètre est incorrect.
Il y a peut être un champ avec un guillemet simple ...
Re
je suis à la recherche d'un nouveau moyen me permettant d'aboutir et je tombe sur un problème :
J'ai un champs (une liste déroulante en fait, mais qui ne me sert que pour le rajout de nouveau élément...). Ce champ possédant une source controle, soit : id_véhiculeOpep (mais bon, peu importe le non), avec une origine source : Table/Requête et un contenu :
SELECT DISTINCTROW VehiculeAntoine.[id_ Véhicules], VehiculeAntoine.cNomVéhicule FROM VehiculeAntoine WHERE VehiculeAntoine.plus_fabriqué=False ORDER BY VehiculeAntoine.cNomVéhicule;
Mon problème est celui ci : POURQUOI, quand VéhiculeAntoine.plus_fabriqué=False ( la case de la liste étant donc vide), SI je demande d'afficher la valeur du champ (case), et bien, il me donne un résultat non vide (qui n'est ni plus que id_véhiculeOpep??????
(affichage : MsgBox Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule].Value )
Ou alors, COMMENT puis-je faire pour que, quand VéhiculeAntoine.plus_fabriqué=False, alors ma case est entièrement vide, SANS valeur!!??????
Merci pour l'attention portée.
je suis à la recherche d'un nouveau moyen me permettant d'aboutir et je tombe sur un problème :
J'ai un champs (une liste déroulante en fait, mais qui ne me sert que pour le rajout de nouveau élément...). Ce champ possédant une source controle, soit : id_véhiculeOpep (mais bon, peu importe le non), avec une origine source : Table/Requête et un contenu :
SELECT DISTINCTROW VehiculeAntoine.[id_ Véhicules], VehiculeAntoine.cNomVéhicule FROM VehiculeAntoine WHERE VehiculeAntoine.plus_fabriqué=False ORDER BY VehiculeAntoine.cNomVéhicule;
Mon problème est celui ci : POURQUOI, quand VéhiculeAntoine.plus_fabriqué=False ( la case de la liste étant donc vide), SI je demande d'afficher la valeur du champ (case), et bien, il me donne un résultat non vide (qui n'est ni plus que id_véhiculeOpep??????
(affichage : MsgBox Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule].Value )
Ou alors, COMMENT puis-je faire pour que, quand VéhiculeAntoine.plus_fabriqué=False, alors ma case est entièrement vide, SANS valeur!!??????
Merci pour l'attention portée.
Bon, je viens de voir que le problème venait directement de la table :
elle possède une colonne dans la quelle, en affichant, je vois une chaine de type XXX-YYY-(...) alors que finalement, quand je fais dse tests dessus ( exemple, choix des lignes dont l'attributs commence par 'X' ca marche pas(pourtant yen a) mais la même chose avec '1' ca marche(pourtant yen a pas de visible, la table doit être une liaison ou dans ce genre là, j'ai du mal à suivre, d'autant que toute la base n'a pas été développé par ma personne), il s'avère qu'il y a des valeurs derrières (autre attribut d'une autre table), heu, j'suis perdu là, quelqu'un pourrez m'expliquer un peu?
elle possède une colonne dans la quelle, en affichant, je vois une chaine de type XXX-YYY-(...) alors que finalement, quand je fais dse tests dessus ( exemple, choix des lignes dont l'attributs commence par 'X' ca marche pas(pourtant yen a) mais la même chose avec '1' ca marche(pourtant yen a pas de visible, la table doit être une liaison ou dans ce genre là, j'ai du mal à suivre, d'autant que toute la base n'a pas été développé par ma personne), il s'avère qu'il y a des valeurs derrières (autre attribut d'une autre table), heu, j'suis perdu là, quelqu'un pourrez m'expliquer un peu?
Passons, il faudrait juste que je sache comment, à partir d'une requête comment tester si un champ est égal à une des valeurs d'un attribut dans la table!
Quelqu'un aurrait un petit exemple à me montrer?
Quelqu'un aurrait un petit exemple à me montrer?
Dim truc As Integer
Dim rep As String
Dim varX As Variant
Dim base As Database
Dim RS As Recordset
Dim requete As String
requete = "Select VA.[id_ Véhicules] FROM [Association Fiche caisse] AFC, VehiculeAntoine VA WHERE AFC.id_véhiculeOpep = VA.[id_ Véhicules]; "
Set base = CurrentDb
Set RS = base.OpenRecordset(requete, dbOpenDynaset)
RS.MoveLast
truc = RS.RecordCount
RS.MoveFirst
For cpt = 0 To 5 'RS.RecordCount - 1
MsgBox RS(cpt)
''''RS.MoveNext
Next cpt
Quand j'effectue cette boucle, il m'affiche la première valeur avant d'aboutir à une erreur du type : '3265, élément non trouvé dans cette collection'.
Une idée sur mon problème?
Dim rep As String
Dim varX As Variant
Dim base As Database
Dim RS As Recordset
Dim requete As String
requete = "Select VA.[id_ Véhicules] FROM [Association Fiche caisse] AFC, VehiculeAntoine VA WHERE AFC.id_véhiculeOpep = VA.[id_ Véhicules]; "
Set base = CurrentDb
Set RS = base.OpenRecordset(requete, dbOpenDynaset)
RS.MoveLast
truc = RS.RecordCount
RS.MoveFirst
For cpt = 0 To 5 'RS.RecordCount - 1
MsgBox RS(cpt)
''''RS.MoveNext
Next cpt
Quand j'effectue cette boucle, il m'affiche la première valeur avant d'aboutir à une erreur du type : '3265, élément non trouvé dans cette collection'.
Une idée sur mon problème?
Bonjour
C'est normal ta boucle : For cpt = 0 to 5 ... 1) la syntaxe n'est pas bonne : RS.Fields(cpt) ... 2) Tu n'as qu'un champ dans ta requête donc tu lis bien le champ(0) mais le champ(1) n'existant pas, le programme lève une exception.
Pour lire le recordset il faut une boucle type while ...
...
While Not RS.EOF
MsgBox RS.Fields(0).Value
Wend
...
D'autre part :
// RS.MoveLast 'Inutile pour l'instruction suivante
truc = RS.RecordCount
// RS.MoveFirst 'Doit être placer placer juste après l'envoie de la requête pour se placer sur le premier enregistrement.
Bon courage
;o)
Polux
C'est normal ta boucle : For cpt = 0 to 5 ... 1) la syntaxe n'est pas bonne : RS.Fields(cpt) ... 2) Tu n'as qu'un champ dans ta requête donc tu lis bien le champ(0) mais le champ(1) n'existant pas, le programme lève une exception.
Pour lire le recordset il faut une boucle type while ...
...
While Not RS.EOF
MsgBox RS.Fields(0).Value
Wend
...
D'autre part :
// RS.MoveLast 'Inutile pour l'instruction suivante
truc = RS.RecordCount
// RS.MoveFirst 'Doit être placer placer juste après l'envoie de la requête pour se placer sur le premier enregistrement.
Bon courage
;o)
Polux
Bjr à tous,
je n'arrive pa à afficher la valeur (contenue dans une autre table access) correspondante à celle saisie par l'utilisateur; en fait je veux utiliser l'événement "sur perte focus" du champ précédent et la valeur correspondante à celle saisie sera affichée dans le prochain champs
il y a évidemment liaison entre les tables
comment procéder?
je n'arrive pa à afficher la valeur (contenue dans une autre table access) correspondante à celle saisie par l'utilisateur; en fait je veux utiliser l'événement "sur perte focus" du champ précédent et la valeur correspondante à celle saisie sera affichée dans le prochain champs
il y a évidemment liaison entre les tables
comment procéder?