Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2011, 11h48   #1
Invité régulier
 
Inscription : mars 2007
Messages : 40
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 40
Points : 5
Points : 5
Par défaut Comparer plusieurs valeurs avec un Dlookup

Bonjour,

J'effectue un petit test avec un Dlookup:


Code :
1
2
3
 If Abs(DLookup("error", "Registration", "Temp_ID ='" & str & "'")) 
> DLookup("allowed", "Registration", "Temp_ID ='" & str & "'") 
Then
Le problème c'est que dans ma DB "registration" il y a plusieurs lignes contenant pour un même "Temp_ID" plusieurs "error".
Le dlookup n'effectue donc mon test que sur la première et ne vérifie pas les autres

Comment faire pour qu'il vérifie sur chaque ligne

Merci d'avance
Skootman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 12h44   #2
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Bonjour.

Tu ouvres un jeu d'enregistrement sur le même Temp_ID, et tu fais un test pour chaque enregistrement.

Cordialement,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 13h24   #3
Invité régulier
 
Inscription : mars 2007
Messages : 40
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 40
Points : 5
Points : 5
Merci pour la réponse rapide mais je ne connais absolument pas les objets recordset. Et quand je vois les 110 pages du tutorial de ce site sur les record set je suis plutot découragé


Y aurait-il moyen d'avoir le bout de code correspondant à ces opérations.

En vous remerciant d'avance

Cdlt
Skootman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 08h26   #4
Invité régulier
 
Inscription : mars 2007
Messages : 40
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 40
Points : 5
Points : 5
Bonjour,

Personne pour me donner le bout de code correspondant ?

Cdlt
Skootman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 09h23   #5
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Lire et connaître par coeur les 110 pages du tutoriel n'est pas nécessaire (dans un premier temps, bien sûr!!!)

Il faut se consacrer sur la partie des recordset, à savoir Partie 5 : DAO et l'accés aux données

Je pense que vous pourriez y parvenir.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 10h32   #6
Invité régulier
 
Inscription : mars 2007
Messages : 40
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 40
Points : 5
Points : 5
Bonjour,

Première question:

Y-a-t-il un risque que je bousille la DB en essayant de manipuler des recordset ? Pcq je vous avoue que c'est ce qui me bride le plus à tenter l'aventure.

Sinon, voici ce vers quoi je me lancerais (absolument pas testé):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
            i = 0
            Do
            Set RstTest = dbs.OpenRecordset("Select * from Registration where Temp_ID=" & Chr(34) & str & Chr(34), dbOpenDynaset, [dbSeeChanges])
            If Abs(RstTest.Fields("error")) > RstTest.Fields("allowed") Then
            Me.error_text.Visible = True
            Me.error_text = "          Attention !!!!          Ce numéro provisoire n'a pas réussi les tests primitifs"
            Exit Do
            End If
            i = 1 + 1
            RstTest.MoveNext
 
             Loop Until i < RstTest.RecordCount
Je me doute qu'il doit y avoir une méthode plus élégante mais c'est déja un début

Cdlt
Skootman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 12h08   #7
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Dans un premier temps, vous pouvez bien sûr travailler sur des sauvegarde, bien sûr.

Pour répondre plus précisément, l'utilisation des recordset peut bien sûr "bousiller" des données, mais pas plus qu'avec certaines inscructions SQL.

Les méthode ".AddNew" et ".edit" modifie le contenu des données.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 09h21   #8
Invité régulier
 
Inscription : mars 2007
Messages : 40
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 40
Points : 5
Points : 5
BOnjour

Voila j'ai avancé mais y'a encore un ou 2 trucs qui posent problème.

En faisant des tests, j'ai remarqué que la fonction .recordcount ne me renvoit pas ce que je souhaite.

Lorsque je crée un recordset sur un temp_id qui a passé 4 tests (donc d'après moi 4 lignes dans le recordset) la fonction recordcount me renvoit 1...

Je suis donc exactement à mon point de départ (je ne test que le premier test) à part que cette fois ci j'utilise un recordset

Qqu à une idée ?

Deuxième petit problème, le lisais dans la doc qu'il faut fermer lme recordset pour éviter de devoir trop régulièrement compacter la base. Je le ferme à quel moment ?
Cdlt
Skootman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 09h55   #9
Invité régulier
 
Inscription : mars 2007
Messages : 40
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 40
Points : 5
Points : 5
Voila corrigé et réglé

Tout fonctionne

Merci bcp:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
 
            i = 0
            Set RstTest = dbs.OpenRecordset("Select * from Registration where Temp_ID=" & Chr(34) & str & Chr(34), dbOpenDynaset, [dbSeeChanges])
            Do
            If Abs(RstTest.Fields("error")) > RstTest.Fields("allowed") Then
            Exit Do
            End If
            i = i + 1
            RstTest.MoveNext
 
             Loop Until i = RstTest.RecordCount
Skootman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 10h01   #10
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

1/ la propriété "recordcount" a une petite subtilité.
Tant que le pointeur n'a pas atteint le dernier enregistrement, recordcount renvoie le nombre d'enregistrement jusqu'à celui qu'il pointe actuellement (si j'ai bien compris).
Solution : avant d'utiliser un recordcount, aller jusqu'au dernier enregistrement (movelast)


2/ on le ferme une fois qu'on a plus besoin ni de lire des données, ni d'en modifier, ni d'en ajouter.
Bref, en général quand on sort de la procédure.

PS : j'ai vu qu'entre temps vous aviez trouvé.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h49.


 
 
 
 
Partenaires

Hébergement Web