dr.loveless Posté(e) le 1 juin 2004 Posté(e) le 1 juin 2004 Salut je cherche à faire un code me permettant de tester une valeur que je saisi dans une table Access. En fait, je fais apparaitre une boite de dialogue dans laquelle je demande un numéro d'affaire. Tous les numéros d'affaire déjà traité sont stocké dans une base Access, je veux donc savoir si le numéro entrez précedemment fais partie de cette table. S'il en fais partie, çà me retourne une boite de dialogue me le stipulant, si çà n'en fais pas partie çà me l'ajoute. Voici le code à l'heure actuelle : Public dbaffaire As Object Private Sub cmdValiderNumAff_Click() Dim affaire As Recordset Set dbaffaire = OpenDatabase("R:\0-DAO-Gestion\Gestion\gestion.mdb")Set affaire = dbaffaire.OpenRecordset("Affaire", dbOpenDynaset) If affaire![NumAff] = txtAffaire Then ---> c'est à ce niveau là que je bloqueMsgBox "ok"Elseaffaire.AddNewaffaire![NumAff] = txtAffaireaffaire.Update End If dbaffaire.CloseSet dbaffaire = NothingUnload Me End Sub Merci encore!! Le DOC
Camille Posté(e) le 1 juin 2004 Posté(e) le 1 juin 2004 J'ai une suggestion à faire : le principe est bon, mais tu oublies de parcourir tous les enregistrements de la table Access Affaire. Ta table va contenir plusieurs enregistrements, elle va s'aggrandir au fur et à mesure de son utilisation. Il faut donc parcourir (faire une boucle) afin de rechercher le N° d'affaire saisi (txtaffaire) et pouvoir conclure : OK s'il existe, le créer s'il n'existe pas dans la table.Voilà le code correspondant : ' est une marque de commentaire en VBA Public dbaffaire As Database Sub cmdValiderNumAff_Click() Dim affaire As RecordsetDim trouve As Boolean 'se connecter sur la base de données Gestion.mdbSet dbaffaire = OpenDatabase("C:\0-DAO-Gestion\Gestion\gestion.mdb")'Pointer sur la table AffaireSet affaire = dbaffaire.OpenRecordset("Affaire", dbOpenDynaset)'Utiliser une variable logique (booleenne) pour indiquer :' Vrai (true) si le txtaffaire existe dans la table' Faux (false) si le txtaffaire n'existe pastrouve = False 'Regarder si la table Affaire est videIf Not (affaire.EOF And affaire.BOF) Then'La table n'est pas vide'Se placer sur le premier enregistrement. Il va falloir boucler sur' tous les enregistrements de la table pour rechercher l'existence' de txtaffaire affaire.MoveFirst Do Until raffaire.EOF If affaire![NumAff] = txtaffaire Then ' on a trouve le txtaffaire dans la table MsgBox "ok" trouve = True 'sortir de la boucle Exit Do Else 'Cet enregistrement n'est pas le bon => passer au suivant affaire.MoveNext End If Loop 'As-t-on trouvé txtaffaire ?If Not trouve Then 'Pas trouvé ==> le créer dans la table affaire.AddNew affaire![NumAff] = txtaffaire affaire.Update End If End If dbaffaire.Close Set dbaffaire = Nothing Unload Me End Sub Bon courage ...
dr.loveless Posté(e) le 1 juin 2004 Auteur Posté(e) le 1 juin 2004 C'est d'un simplicité pour certaine personne quand c'est si compliqué pour d'autre !! :casstet: En fait pour tout t'avouer je pensais bien faire une boucle de ce style car je fais souvent ce type de prog, mais en liason avec Excel, et ne connaissant que tres peu Access, je pensais que comme c'est un tableur, il existait déjà une fonction tout faite pour ce type de manip. Merci beaucoup, vraiment sympas! Le DOC
bruno_l Posté(e) le 2 juin 2004 Posté(e) le 2 juin 2004 ca se fait en lisp, ca doit se faire en VBA il existe adolisp de fleming group qui permet de se connecter via odbc sur tous type de base de donnée(ca marche même avec MySQL !) http://www.fleming-group.com ensuite une simple requete sql du style select count(monchamp) from mabase where monchamp = mavaleur
tecnopat Posté(e) le 14 janvier 2008 Posté(e) le 14 janvier 2008 Bonjour Camille, je ne dispose pas des objets Recorset dans mon environnement VBAIDE, quel référecne externe faut-il importer ?
winfield Posté(e) le 18 mars 2008 Posté(e) le 18 mars 2008 ce serait peu-être plus simple de "balancer" le n°, si le n° existe réciperer l'erreur et faire en conséquence, sinon continuer le programme...is j'ai bien compris. Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
OtObOx Posté(e) le 19 novembre 2008 Posté(e) le 19 novembre 2008 Si la table est faite sous Access, le plus simple à mon avis est de mettre dans le champ "Affaire" la propriété "Sans doublon". Ensuite, gérer par "On error goto" sous AutoCAD et tester le numéro de l'erreur retournée.Il y a aussi une solution dans le code donné sur ce message 'Vérifier que l'expression n'existe pas dans la table ExpAng: Set rstRech = db.OpenRecordset("tabExpAng", dbOpenDynaset) rstRech.FindFirst ("ExpAng = '" & strTexte & "'") If rstRech.NoMatch Then 'Si l'expression n'est pas dans la table rst.AddNew A replacer dans le contexte ! [Edité le 20/11/2008 par OtObOx] OtObOxblOg photoAutoCAD et vba
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant